TW1 <GO>TARGET WATCH2 <GO>MARKETLIVE
API

TargetWatch API

TargetWatch tracks analyst price targets for Nordic stocks and makes them available as Nordic equity data. Explore it on this site - the API gives you the same data programmatically. Everything is JSON over HTTPS.

Get a key

Create and manage your keys right here:

Authentication

Send your key as a Bearer token in the Authorization header:

GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/stocks"

Requests without a valid key return 401.

Plans and rate limits

FreeAPI Plus
Price$0$1/month
Requests10 per day1,000 per hour
AccessTry it out: the full stock list plus current consensus for any tickerEverything: all tickers, history, the recommendations feed, changes and analyst accuracy

Upgrade to API Plus for $1/month in the key section above.

Every response includes your tier and rate-limit status:

  • X-API-Tier: free or pro
  • X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

When the limit is exceeded you get 429 with a Retry-After header.

Free endpoints

GET /api/v1/stocks FREE

All covered stocks. Available on every plan.

ROW FIELDS:

tickerstockmarketlistsectorindustrycountrycurrency
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/stocks"
200 OK - ONE ROW SHOWN
[
  {
    "ticker": "8TRA",
    "stock": "Traton",
    "market": "Stockholmsbörsen",
    "list": "Large Cap",
    "sector": "Industrials",
    "industry": "Farm & Heavy Construction Machinery",
    "country": "sweden",
    "currency": "SEK"
  },
  ...
]
GET /api/v1/stocks/{ticker}/targets FREE

Current consensus for one stock: latest price, consensus target, upside, and the individual houses behind it. Available on every plan, for any ticker.

ROW FIELDS:

tickerstockcurrencydateconsensusTargetlatestPricelatestPriceDateupsidePcthouses[]
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/stocks/VOLV-B/targets"
200 OK
{
  "ticker": "VOLV-B",
  "stock": "Volvo",
  "currency": "SEK",
  "date": "2026-09-15",
  "consensusTarget": 370,
  "latestPrice": 337.8,
  "latestPriceDate": "2026-09-17",
  "upsidePct": 9.53,
  "houses": [
    { "id": 33308, "house": "Jefferies", "priceTarget": 370, "date": "2026-09-15" }
  ]
}

API Plus endpoints

GET /api/v1/analysts API PLUS

The analyst houses we track.

ROW FIELDS:

slughouse
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/analysts"
200 OK - ONE ROW SHOWN
[
  { "slug": "abg-sundal-collier", "house": "ABG Sundal Collier" },
  { "slug": "aktiespararna", "house": "Aktiespararna" },
  ...
]
GET /api/v1/stocks/{ticker}/targets/history API PLUS

Full price-target history for one stock. from and to are optional YYYY-MM-DD dates (inclusive). Items are newest first.

ROW FIELDS:

idhousepriceTargetcurrencydate

PARAMETERS:

fromto
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/stocks/VOLV-B/targets/history?from=2026-01-01&to=2026-09-18"
200 OK - ONE ROW SHOWN
[
  { "id": 33308, "house": "Jefferies", "priceTarget": 370, "currency": "SEK", "date": "2026-09-15" },
  { "id": 33192, "house": "Morgan Stanley", "priceTarget": 355, "currency": "SEK", "date": "2026-09-04" },
  ...
]
GET /api/v1/recommendations API PLUS

The global feed of price targets, newest first, filterable by date range, house and ticker. Paginated - see below.

ROW FIELDS:

idtickerstockhousepriceTargetcurrencydate

PARAMETERS:

fromtohousetickerlimitcursor
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/recommendations?from=2026-09-01&house=dnb-carnegie&limit=100"
200 OK - ONE ROW SHOWN
{
  "items": [
    {
      "id": 33368,
      "ticker": "ORSTED",
      "stock": "Ørsted",
      "house": "ABG Sundal Collier",
      "priceTarget": 180,
      "currency": "DKK",
      "date": "2026-09-18"
    },
    ...
  ],
  "total": 28610,
  "nextCursor": "MTAw"
}
GET /api/v1/recommendations/{id} API PLUS

One complete price-target record, including the source article link for provenance.

ROW FIELDS:

idtickerstockhousepriceTargetcurrencydatelink
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/recommendations/33368"
200 OK
{
  "id": 33368,
  "ticker": "ORSTED",
  "stock": "Ørsted",
  "house": "ABG Sundal Collier",
  "priceTarget": 180,
  "currency": "DKK",
  "date": "2026-09-18",
  "link": "https://www.placera.se/telegram/dagens-aktierekommendationer-i-oversikt-20260918"
}
GET /api/v1/changes API PLUS

New price targets published since a date, for polling. since is required (YYYY-MM-DD) and may look back at most 31 days - use /api/v1/recommendations for older history. Paginated like the feed.

ROW FIELDS:

idtickerstockhousepriceTargetcurrencydate

PARAMETERS:

sincelimitcursor
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/changes?since=2026-09-12"
200 OK - ONE ROW SHOWN
{
  "items": [
    {
      "id": 33368,
      "ticker": "ORSTED",
      "stock": "Ørsted",
      "house": "ABG Sundal Collier",
      "priceTarget": 180,
      "currency": "DKK",
      "date": "2026-09-18"
    },
    ...
  ],
  "total": 12,
  "nextCursor": "MTAw"
}
GET /api/v1/analysts/{house}/accuracy API PLUS

Hit rate, direction accuracy, median error and per-sector breakdown for one house, from our rolling 365-day evaluation.

ROW FIELDS:

housesluggeneratedAtstats.hitRatestats.directionAccuracystats.medianErrorstats.upHitRatestats.downHitRatesectors[]
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/analysts/dnb-carnegie/accuracy"
200 OK
{
  "house": "DNB Carnegie",
  "slug": "dnb-carnegie",
  "generatedAt": "2026-09-12",
  "stats": {
    "hitRate": 57.1,
    "directionAccuracy": 51.4,
    "medianError": 27.5,
    "evaluableTargets": 2951,
    "upTargets": 2612,
    "upHitRate": 53.7,
    "downTargets": 338,
    "downHitRate": 83.4
  },
  "sectors": [
    { "sector": "Industrials", "evaluableTargets": 790, "hits": 491, "hitRate": 62.2 },
    ...
  ]
}
GET /api/v1/stocks/{ticker}/insider-trades API PLUS

Insider transactions for one stock. The dataAsOf field shows the latest publication date in the dataset.

ROW FIELDS:

tickerstockpersonroletypevolumepricecurrencytotalValuepublicationDatetransactionDatedataAsOftotal
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/stocks/VOLV-B/insider-trades"
200 OK - ONE ROW SHOWN
{
  "dataAsOf": "2026-05-22",
  "total": 2,
  "items": [
    {
      "ticker": "VOLV-B",
      "stock": "Volvo",
      "person": "Bo Annvik",
      "role": "board_member",
      "type": "buy",
      "volume": 1757,
      "price": 284.3,
      "currency": "SEK",
      "totalValue": 499515,
      "publicationDate": "2025-11-27",
      "transactionDate": "2025-11-27"
    },
    ...
  ]
}
GET /api/v1/insider-trades API PLUS

The global insider-trading feed, newest first, filterable by date range, ticker and type (buy or sell). Paginated like the recommendations feed.

ROW FIELDS:

tickerstockpersonroletypevolumepricecurrencytotalValuepublicationDatetransactionDate

PARAMETERS:

fromtotickertypelimitcursor
GET REQUEST
curl -H "Authorization: Bearer YOUR-KEY" \
  "https://www.targetwatch.io/api/v1/insider-trades?type=buy&limit=100"
200 OK - ONE ROW SHOWN
{
  "items": [
    {
      "ticker": "CHEF",
      "stock": "Cheffelo",
      "person": "Adam Björklund",
      "role": "management",
      "type": "buy",
      "volume": 1100,
      "price": 119.6,
      "currency": "SEK",
      "totalValue": 131560,
      "publicationDate": "2026-05-22",
      "transactionDate": "2026-05-22"
    },
    ...
  ],
  "total": 2199,
  "nextCursor": "MTAw"
}

Pagination

Feed endpoints (recommendations, changes, insider-trades) return at most limit items per call (default 100, max 500):

{ "items": [ ... ], "total": 7792, "nextCursor": "MTAw" }

Pass nextCursor back as cursor until it comes back null.

Errors

  • 400 - invalid parameter (bad date, cursor, limit, or a since beyond 31 days)
  • 401 - missing or invalid API key
  • 403 - valid key, but the endpoint requires API Plus
  • 404 - unknown ticker, house or recommendation id
  • 429 - rate limit exceeded, see Retry-After

License

The data is licensed for your internal use. You may build products, analysis and decisions on it. You may not redistribute the raw data, resell it, or expose it as a competing data service. Reach out if you need redistribution rights.

Changelog

  • 2026-09-19 - Free tier reworked: any ticker on the free endpoints, 10 requests per day (previously demo ticker only, 60 per hour). API key management moved onto this page.
  • 2026-09-18 - API v1: new endpoints under /api/v1/, cursor pagination, date-range filtering, changes feed, analyst accuracy, insider trading endpoints. The legacy GET /api/recommendations (with ?include=history for API Plus) is deprecated - it keeps working for existing integrations and sends a Deprecation header, but use /api/v1/recommendations for anything new.