API
TargetWatch provides structured Nordic stock data through an API. Retrieve analyst price targets, target changes, analyst houses and insider trades as 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:
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/stocks"
Requests without a valid key return 401.
Plans and rate limits
FREE
$0
10 REQUESTS PER DAY
- All stocks we have data for
- Current consensus for any ticker
- Analyst houses
EVERYTHING INCLUDED
API PLUS
$1/month
1,000 REQUESTS PER HOUR
- Everything in Free
- Full price-target history
- Targets feed and changes
- Insider trades
Every response includes your tier and rate-limit status:
X-API-Tier:freeorproX-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset
When the limit is exceeded you get 429 with a Retry-After header.
Buying API Plus
- Log in (or create an account) via the button in the top right.
- Open the key section on this page and choose API Plus in the pricing cards.
- Pay by card - the subscription is $1/month and your key is upgraded to 1,000 calls per hour immediately.
Manage or cancel your subscription anytime under My page.
Payments processed by Stripe.
Free endpoints
/api/v2/analysts
FREE
The analyst houses we track. Available on every plan.
ROW FIELDS:
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/analysts"
[
{ "slug": "abg-sundal-collier", "house": "ABG Sundal Collier" },
{ "slug": "aktiespararna", "house": "Aktiespararna" },
...
]
/api/v2/stocks
FREE
All covered stocks. Available on every plan.
ROW FIELDS:
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/stocks"
[
{
"ticker": "8TRA",
"stock": "Traton",
"market": "Stockholmsbörsen",
"list": "Large Cap",
"sector": "Industrials",
"industry": "Farm & Heavy Construction Machinery",
"country": "sweden",
"currency": "SEK"
},
...
]
/api/v2/stocks/{ticker}/targets
FREE
Current median target for one stock: latest price, median target, upside, and the individual houses behind it. Available on every plan, for any ticker.
ROW FIELDS:
PARAMETERS:
| Name | Type | Required | Meaning | Example |
|---|---|---|---|---|
| ticker | string | Required | Ticker used to select one stock. | VOLV-B |
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/stocks/VOLV-B/targets"
API Plus endpoints
/api/v2/stocks/{ticker}/targets/history
API PLUS
Full price-target history for one stock, newest first.
ROW FIELDS:
PARAMETERS:
| Name | Type | Required | Meaning | Example |
|---|---|---|---|---|
| from | date | Optional | Inclusive start date (YYYY-MM-DD). | 2026-01-01 |
| to | date | Optional | Inclusive end date (YYYY-MM-DD). | 2026-09-18 |
| ticker | string | Required | Ticker used to select one stock. | VOLV-B |
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/stocks/VOLV-B/targets/history?from=2026-01-01&to=2026-09-18"
[
{ "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" },
...
]
/api/v2/targets
API PLUS
The global feed of price targets, newest first.
ROW FIELDS:
PARAMETERS:
| Name | Type | Required | Meaning | Example |
|---|---|---|---|---|
| from | date | Optional | Inclusive start date (YYYY-MM-DD). | 2026-01-01 |
| to | date | Optional | Inclusive end date (YYYY-MM-DD). | 2026-09-18 |
| house | string | Optional | Case-insensitive house filter. | dnb-carnegie |
| ticker | string | Optional | Exact ticker match | VOLV-B |
| limit | integer | Optional | Rows per page; 1-500 (default 100). | 100 |
| cursor | string | Optional | nextCursor from the previous response. | MTAw |
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/targets?from=2026-09-01&house=dnb-carnegie&limit=100"
{
"items": [
{
"id": 33368,
"ticker": "ORSTED",
"stock": "Ørsted",
"house": "ABG Sundal Collier",
"priceTarget": 180,
"currency": "DKK",
"date": "2026-09-18"
},
...
],
"total": 28610,
"nextCursor": "MTAw"
}
/api/v2/targets/{id}
API PLUS
One complete price-target record.
ROW FIELDS:
PARAMETERS:
| Name | Type | Required | Meaning | Example |
|---|---|---|---|---|
| id | integer | Required | Target record ID. | 33368 |
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/targets/33368"
{
"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"
}
/api/v2/targets/changes
API PLUS
New price targets for polling.
ROW FIELDS:
PARAMETERS:
| Name | Type | Required | Meaning | Example |
|---|---|---|---|---|
| since | date | Required | Required start date (YYYY-MM-DD); maximum lookback is 31 days. | 2026-09-12 |
| limit | integer | Optional | Rows per page; 1-500 (default 100). | 100 |
| cursor | string | Optional | nextCursor from the previous response. | MTAw |
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/targets/changes?since=2026-09-12"
{
"items": [
{
"id": 33368,
"ticker": "ORSTED",
"stock": "Ørsted",
"house": "ABG Sundal Collier",
"priceTarget": 180,
"currency": "DKK",
"date": "2026-09-18"
},
...
],
"total": 12,
"nextCursor": "MTAw"
}
/api/v2/stocks/{ticker}/insider-trades
API PLUS
Insider transactions for one stock.
RESPONSE ENVELOPE:
ROW FIELDS:
PARAMETERS:
| Name | Type | Required | Meaning | Example |
|---|---|---|---|---|
| status | enum | Optional | FI-source status values: Aktuell, Reviderad, Makulerad. The default excludes Makulerad; use all to include cancelled notices. | all |
| category | enum | Optional | Transaction category: market-buy, market-sell, off-market-buy, off-market-sell, redemption, grant, subscription, gift, internal, or other. | market-buy |
| marketImpact | enum | Optional | Allowed values: buy-pressure, sell-pressure, no-pressure. | buy-pressure |
| ticker | string | Required | Ticker used to select one stock. | VOLV-B |
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/stocks/VOLV-B/insider-trades"
{
"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",
"status": "Aktuell"
},
...
]
}
/api/v2/insider-trades
API PLUS
The global insider-trading feed, newest first. Source-specific fields are included when available.
RESPONSE ENVELOPE:
ROW FIELDS:
PARAMETERS:
| Name | Type | Required | Meaning | Example |
|---|---|---|---|---|
| from | date | Optional | Publication start date, inclusive (YYYY-MM-DD). | 2026-01-01 |
| to | date | Optional | Publication end date, inclusive (YYYY-MM-DD). Must be on or after from; otherwise the request returns 400. | 2026-09-18 |
| ticker | string | Optional | Exact ticker match | VOLV-B |
| type | enum | Optional | Transaction type: buy, sell, or other. | buy |
| status | enum | Optional | FI-source status values: Aktuell, Reviderad, Makulerad. The default excludes Makulerad; use all to include cancelled notices. | all |
| category | enum | Optional | Transaction category: market-buy, market-sell, off-market-buy, off-market-sell, redemption, grant, subscription, gift, internal, or other. | market-buy |
| marketImpact | enum | Optional | Allowed values: buy-pressure, sell-pressure, no-pressure. | buy-pressure |
| limit | integer | Optional | Rows per page; 1-500 (default 100). | 100 |
| cursor | string | Optional | nextCursor from the previous response. | MTAw |
curl -H "Authorization: Bearer YOUR-KEY" \ "https://www.targetwatch.io/api/v2/insider-trades?type=buy&limit=100"
{
"dataAsOf": "2026-05-22",
"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",
"status": "Aktuell"
},
...
],
"total": 2199,
"nextCursor": "MTAw"
}
Pagination
Feed endpoints (targets, targets/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.
Feed rows carry ticker: null when the company is Nordic but not yet in our catalog. Match on stock (company name) until it is added. Companies reviewed as non-Nordic are not returned in the feed.
Errors
400- invalid parameter (bad date, cursor, limit, or asincebeyond 31 days)401- missing or invalid API key403- valid key, but the endpoint requires API Plus404- unknown house or target id (insider endpoints return200with an emptyitemslist for an unknown ticker)429- rate limit exceeded, seeRetry-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.