STT Info APIsttinfo.fi ↗
Access ~10,000 Finnish stock exchange announcements from STT Info. Browse paginated listings or search by keyword with publisher, date, and category fields.
What is the STT Info API?
The STT Info API provides access to approximately 10,000 Finnish stock exchange announcements (Pörssitiedotteet) across two endpoints. The get_porssitiedotteet endpoint returns paginated listings with headline, publisher, publication date, category, and a direct URL for each announcement. The search_announcements endpoint adds keyword filtering, making it straightforward to isolate disclosures from a specific company or topic.
curl -X GET 'https://api.parse.bot/scraper/460621d2-545f-45ca-ac8a-08a0261c0805/get_porssitiedotteet?page=0&size=5' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace sttinfo-fi-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
STT Info Pörssitiedotteet API Client
Access Finnish stock exchange announcements from STT Info.
Supports paginated listing and keyword search across ~10,000 announcements.
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Optional, Any
class ParseClient:
"""Client for STT Info Pörssitiedotteet API."""
def __init__(self, api_key: Optional[str] = None):
"""
Initialize the Parse API client.
Args:
api_key: API key for authentication. If not provided, reads from PARSE_API_KEY env var.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "460621d2-545f-45ca-ac8a-08a0261c0805"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")
def _call(self, endpoint: str, method: str = "POST", **params) -> dict[str, Any]:
"""
Make a request to the Parse API.
Args:
endpoint: The API endpoint name
method: HTTP method (GET or POST)
**params: Query parameters or request body
Returns:
Response JSON as a dictionary
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}
if method.upper() == "GET":
response = requests.get(url, headers=headers, params=params, timeout=30)
elif method.upper() == "POST":
response = requests.post(url, headers=headers, json=params, timeout=30)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status()
return response.json()
def get_porssitiedotteet(
self,
page: int = 0,
size: int = 20,
language: str = "fi"
) -> dict[str, Any]:
"""
Get paginated stock exchange announcements (Pörssitiedotteet) from STT Info.
Returns headlines, publishers, dates, and categories.
Total ~9961 announcements across ~499 pages (at size=20).
Args:
page: Zero-based page number for pagination. Default: 0
size: Number of announcements per page (1-100). Default: 20
language: Language for announcement titles (fi, en, sv, no, da). Default: fi
Returns:
Dictionary containing announcements, total_count, page info, and total_pages
"""
return self._call(
"get_porssitiedotteet",
method="GET",
page=page,
size=size,
language=language
)
def search_announcements(
self,
query: str,
page: int = 0,
size: int = 20,
language: str = "fi"
) -> dict[str, Any]:
"""
Search stock exchange announcements by keyword.
Returns matching announcements with headlines, publishers, dates, and categories.
Args:
query: Search keyword to filter announcements (e.g. company name or topic)
page: Zero-based page number for pagination. Default: 0
size: Number of announcements per page (1-100). Default: 20
language: Language for announcement titles (fi, en, sv, no, da). Default: fi
Returns:
Dictionary containing matching announcements and pagination info
"""
return self._call(
"search_announcements",
method="GET",
query=query,
page=page,
size=size,
language=language
)
if __name__ == "__main__":
# Initialize the client
client = ParseClient()
print("=" * 80)
print("STT Info Pörssitiedotteet API - Practical Usage Example")
print("=" * 80)
# Example 1: Get the most recent announcements
print("\n1. Fetching the 5 most recent stock exchange announcements...")
recent_result = client.get_porssitiedotteet(page=0, size=5, language="en")
print(f" Total announcements in database: {recent_result['total_count']}")
print(f" Showing page {recent_result['page'] + 1} of {recent_result['total_pages']}")
print(f" Items on this page: {len(recent_result['announcements'])}\n")
for idx, announcement in enumerate(recent_result["announcements"], 1):
print(f" [{idx}] {announcement['title'][:60]}...")
print(f" Publisher: {announcement['publisher']}")
print(f" Date: {announcement['publication_date']}")
print()
# Example 2: Search for announcements about a specific topic
search_query = "technology"
print(f"\n2. Searching for announcements containing '{search_query}'...")
search_result = client.search_announcements(query=search_query, size=3, language="en")
if search_result["announcements"]:
print(f" Found {search_result['total_count']} announcements matching '{search_query}'")
print(f" Showing top 3 results:\n")
for idx, announcement in enumerate(search_result["announcements"], 1):
print(f" [{idx}] {announcement['title'][:60]}...")
print(f" Publisher: {announcement['publisher']}")
print(f" Category: {announcement['category'].split('__')[-1]}")
print(f" ID: {announcement['id']}")
print()
else:
print(f" No announcements found matching '{search_query}'")
# Example 3: Browse through multiple pages of results
print("\n3. Browsing through multiple pages of announcements...")
print(" Collecting announcements from pages 0-2 (3 items per page)...\n")
all_announcements = []
for page_num in range(3):
page_result = client.get_porssitiedotteet(page=page_num, size=3, language="fi")
all_announcements.extend(page_result["announcements"])
print(f" Collected {len(all_announcements)} announcements across 3 pages:")
for announcement in all_announcements:
publisher = announcement["publisher"]
date = announcement["publication_date"].split("T")[0] # Extract date part
print(f" - {date} | {publisher:30} | {announcement['title'][:40]}...")
# Example 4: Search for a company and analyze results
company_query = "Gofore"
print(f"\n4. Searching for all announcements from '{company_query}'...")
company_search = client.search_announcements(query=company_query, size=10, language="fi")
if company_search["announcements"]:
print(f" Found {company_search['total_count']} announcements mentioning '{company_query}'")
print(f" Latest {len(company_search['announcements'])} announcements:\n")
for announcement in company_search["announcements"]:
date = announcement["publication_date"].split("T")[0]
title = announcement["title"]
print(f" {date} - {title}")
else:
print(f" No announcements found for '{company_query}'")
print("\n" + "=" * 80)
print("Example completed successfully!")
print("=" * 80)Get paginated stock exchange announcements (Pörssitiedotteet) from STT Info. Returns headlines, publishers, dates, and categories. The response includes total_pages so you know the valid page range.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number starting from 0. Valid range is 0 to total_pages-1 (total_pages is returned in the response). For example, if total_pages is 1993, valid values are 0 through 1992. |
| size | integer | Number of announcements per page. Must be between 1 and 100. |
| language | string | Language for announcement titles. Accepts: fi, en, sv, no, da. Falls back to first available language if requested language not found. |
{
"type": "object",
"fields": {
"page": "integer, current page number (0-indexed)",
"total_count": "integer, total number of announcements available",
"total_pages": "integer, total number of pages available (valid page range is 0 to total_pages-1)",
"announcements": "array of announcement objects with id, title, publication_date, publisher, category, url",
"items_per_page": "integer, number of items requested per page"
},
"sample": {
"data": {
"page": 0,
"total_count": 9962,
"total_pages": 1993,
"announcements": [
{
"id": "72136373",
"url": "/announcement/72136373?publisherId=69819680",
"title": "Inside information: Eagle Filters Group announces a leadership change",
"category": "en__label__Changes in board/management/certified adviser/auditor/liquidity provider__lang__fi__label__Muutokset hallitus/johto/tilintarkastus",
"publisher": "Eagle Filters Group Oyj",
"publication_date": "2026-06-15T09:00:02.051Z"
}
],
"items_per_page": 5
},
"status": "success"
}
}About the STT Info API
What the API covers
STT Info is a Finnish press release and stock exchange announcement distribution service. This API exposes its Pörssitiedotteet (stock exchange announcements) database, which holds roughly 9,961 announcements at the time of writing. Each record includes an id, title, publication_date, publisher, category, and a url pointing to the full announcement. The data spans corporate disclosures from companies trading on Finnish exchanges.
Endpoints and parameters
get_porssitiedotteet accepts a zero-based page integer and a size between 1 and 100, allowing you to walk the full dataset in chunks. At the default page size of 20, the corpus spans roughly 499 pages. The language parameter controls which language variant of a title is returned — accepted values are fi, en, sv, no, and da. If a requested language is unavailable for a given announcement, the response falls back to the first available language for that record.
search_announcements accepts the same page, size, and language parameters plus a required query string. You can pass a company name, ticker-related keyword, or topic term. Both endpoints return the same response shape: page, total_count, total_pages, items_per_page, and an announcements array.
Pagination and response shape
Both endpoints return total_count and total_pages alongside the current page, so you can determine upfront how many requests a full traversal requires. The announcements array contains objects with consistent fields across both endpoints, which makes switching between browsing and search straightforward without changing your parsing logic.
The STT Info API is a managed, monitored endpoint for sttinfo.fi — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sttinfo.fi changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official sttinfo.fi API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor corporate disclosures for a specific Finnish company by searching its name with
search_announcements - Build a daily digest of new Finnish stock exchange filings using
get_porssitiedotteetsorted bypublication_date - Aggregate announcements by
categoryto track patterns in a specific disclosure type over time - Enrich an investment research tool with publisher-level metadata linking Finnish issuers to their announcement history
- Cross-reference
publication_datefields against market data to study price reactions around disclosure events - Archive the full Pörssitiedotteet corpus by paginating through all ~499 pages and storing each announcement
urlandid
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does STT Info have an official developer API?+
What does the `search_announcements` endpoint return, and how specific can the query be?+
query string, each with id, title, publication_date, publisher, category, and url. The query is a free-text keyword — you can pass a company name, a topic, or any term that appears in the announcement metadata. Results support the same page, size, and language parameters as the listing endpoint.Does the language parameter guarantee results in the requested language?+
fi), so callers should not assume the returned title will match the requested language in all cases.Does the API return the full text of each announcement?+
title, publisher, publication_date, category, and url. Full announcement body text is not included in the response. You can fork this API on Parse and revise it to add an endpoint that fetches the full content from the announcement url.Can I filter announcements by date range or by a specific publisher?+
get_porssitiedotteet endpoint offers pagination and language selection but no date-range or publisher filter. The search_announcements endpoint accepts a keyword query that can include a publisher name, which provides partial filtering. You can fork this API on Parse and revise it to add dedicated date-range or publisher filter parameters.