News sentiment analysis API

Score every news article for sentiment toward each company it names, and for the events you track

Ask each article fixed questions (“Is this good or bad news for {company}?”, “Does it report a supply problem?”, “A guidance change?”) and get probabilities you can aggregate into daily indicators. One read of the article answers every question for every company.

Read the quickstart
Cost at scale

1M articles for about $117

On spinf-12b, our optimized Gemma 4 12B, only input is billed, at $0.09 per million tokens: the content once per call, each question's own tokens, and one empty floor per question. The scores are free.

Combine use cases in the same call

Ask sentiment, events and topics together, and add adverse-media questions (fraud, sanctions, litigation) for the names you screen: the article is read once, and each extra question adds only its own tokens.

articles1,000,000× tokens each (about)1,300= tokens1.3B× $0.09 / 1M$117.00

Assumes 800-token articles, 20 questions of about 25 tokens each. The first 50M tokens are free. Gemma is a trademark of Google LLC.

Pricing details
On demand · self-serve

$0.09 per million input tokens · the scores are free

Why spinf

Calibrated answers for news analysis, at any scale

Many questions, one read

Sentiment toward each company, the expected impact, the topic, the events reported: all answered in one pass over the article. Placeholders ask the same question for every entity.

Calibrated, comparable scores

Every answer comes with its empty-content floor, which removes the question’s own bias, so scores from different questions can be compared, and ranked against your own history.

Priced for archives

Backfill years of news for the price of a few model calls elsewhere: only the input is billed, and each question costs only its own tokens.

Live example

One article, three kinds of questions

Sentiment per company with a placeholder, and two yes/no event questions. The bars show p; the tick shows the floor, the same question asked with no article.

Content
Northwind Motors shares fell 8% on Tuesday after the carmaker cut its full-year delivery target, citing a shortage of battery cells at its Nevada plant. Its cell supplier, Voltra, said it expects to restore full output by the end of the quarter.

For {company}, this news is (positive, neutral, or negative):

Northwind Motors

positive

0.19

neutral

0.44

negative

0.36

Voltra

positive

0.41

neutral

0.43

negative

0.17

Does the article report a production or supply problem?

yes

0.85

no

0.15

Does the article report a change in guidance or targets?

yes

0.93

no

0.07

import os
import requests

resp = requests.post(
    "https://api.spinf.com/v1/score",
    headers={"Authorization": f"Bearer {os.environ['SPINF_API_KEY']}"},
    json={
      "model": "spinf-12b",
      "messages": [
        {
          "role": "user",
          "content": "Northwind Motors shares fell 8% on Tuesday after the carmaker cut its full-year delivery target, citing a shortage of battery cells at its Nevada plant. Its cell supplier, Voltra, said it expects to restore full output by the end of the quarter."
        }
      ],
      "scoring": {
        "queries": [
          {
            "id": "sentiment",
            "template": "\n\nFor {company}, this news is (positive, neutral, or negative):{?}",
            "options": [
              " positive",
              " neutral",
              " negative"
            ],
            "combinations": [
              {
                "company": "Northwind Motors"
              },
              {
                "company": "Voltra"
              }
            ]
          },
          {
            "id": "supply_problem",
            "template": "\n\nDoes the article report a production or supply problem?\nAnswer:{?}",
            "options": [
              " yes",
              " no"
            ]
          },
          {
            "id": "guidance_change",
            "template": "\n\nDoes the article report a change in guidance or targets?\nAnswer:{?}",
            "options": [
              " yes",
              " no"
            ]
          }
        ]
      }
    },
)
for query in resp.json()["results"][0]["queries"]:
    for combo in query["combinations"]:
        print(query["id"], combo["values"], [(o["text"], o["p"], o["floor_p"]) for o in combo["options"]])

Read the lift over the floor, not only the largest bar: for Northwind, "negative" is the answer the article raises most above the floor, while the largest raw bar, "neutral", is lifted less. Simple yes/no questions about events give the clearest reads.

The API call behind this example, the docs and the benchmark code are easier to read on a larger screen. Start free now, and pick it up on your laptop.

In production · Thinking Text

Daily oil and equity indexes built on these reads

Thinking Text asks about five hundred fixed questions of every oil article and aggregates the answers into a daily read of the press. Not a forecast: a measured read of what the news says.

15M

news articles

five years, 2022–2026
~1T

tokens processed

across research iterations
0.85

correlation with crude

best year · 0.80 pooled on WTI
92%

of big 20-day moves

read in the right direction

Figures from the Thinking Text oil index, published daily with its score card.

Read the Thinking Text story
Benchmark · 108 test articles

Sentiment per company and events, measured

Measured on 108 synthetic news articles about fictional companies (255 company mentions), labelled by a language model and checked blind by a second model, with no examples and with 4 or 8 labelled example articles placed in the prompt.

95%

correct sentiment per company

255 mentions · 8 examples in the prompt · 76% with no examples
98%

correct · supply problem?

108 articles · 8 examples · 94% with no examples
99%

correct · guidance change?

108 articles · 8 examples · 98% with no examples
94%

correct main topic (5)

108 articles · 8 examples · 88% with no examples (calibrated) · spinf-31b: 95% with no examples

Synthetic articles are cleaner than real news. On public financial-news posts (short and informal, 300 items), sentiment accuracy was 69% with spinf-12b and 82% with the larger spinf-31b (Gemma 4 31B, on request), with the same 8 examples in the prompt: test on a sample of your own sources.

Test sets, questions and code on GitHub: reproduce it with your own key

The questions matter: iterate on yours

As with any language model, the wording of the questions and a few labelled examples change the results a lot. With spinf that is cheap to get right: try a few wordings and example sets on a few hundred of your own items for cents, and keep the best. How to write questions

How it works

From questions to numbers

Self-serve on the on-demand API: sign up, create a key and send your first batch in minutes.

1

Write the questions

Plain-language templates with the answers you want scored: sentiment toward {company}, impact, topic, the events you track. Test them on a few hundred articles.

2

Backfill the archive

Send articles in batches with many inputs per call. Years of news run on the on-demand API; for the largest projects we also take files in bulk.

3

Aggregate into signals

Remove the floor, place each score on its own history, and combine per day, per entity and per source. Then compare with prices, flows or outcomes.

FAQ

News analysis: questions, answered

More in the docs and the guides: entity-level sentiment for news and probabilities from a language model, or .

It is broader: you write the questions. Sentiment toward each company is one of them, next to impact, topics, events and anything else your analysts would ask. Each question returns the probability of each of your answers.

spinf returns the floor of each answer (the same question with empty content). Subtract it, then rank each score against the same question over a baseline of articles. The Calibration guide in the docs shows how.

Yes. The Thinking Text indexes were built on 15 million articles and about a trillion tokens across research iterations. For projects over a trillion tokens we also offer dedicated deployments and file-based batch.

Yes. A placeholder such as {company} asks the same question for every name you list, up to a thousand values per question, all over one read of the article.

No. Content sent for scoring is processed in memory and not stored by default, and it is never used to train models.
Try it on your data

The first 50M tokens are on us

Sign up, create a key and score your first batch in minutes.