Discover/STT Info API
live

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.

This API takes change requests — .
Endpoints
2
Updated
8d ago

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.

This call costs1 credit / call— charged only on success
Try it
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.
Number of announcements per page. Must be between 1 and 100.
Language for announcement titles. Accepts: fi, en, sv, no, da. Falls back to first available language if requested language not found.
api.parse.bot/scraper/460621d2-545f-45ca-ac8a-08a0261c0805/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
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'
Python SDK · recommended

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)
All endpoints · 2 totalmissing one? ·

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.

Input
ParamTypeDescription
pageintegerPage 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.
sizeintegerNumber of announcements per page. Must be between 1 and 100.
languagestringLanguage for announcement titles. Accepts: fi, en, sv, no, da. Falls back to first available language if requested language not found.
Response
{
  "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.

Reliability & maintenance

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?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • 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_porssitiedotteet sorted by publication_date
  • Aggregate announcements by category to 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_date fields 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 url and id
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does STT Info have an official developer API?+
STT Info does not publish a documented public developer API. Access to the Pörssitiedotteet data is available through this Parse API.
What does the `search_announcements` endpoint return, and how specific can the query be?+
It returns a paginated list of announcement objects matching the 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?+
No. If a requested language variant is not available for a given announcement, the API falls back to the first available language for that record. Some announcements may only exist in Finnish (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?+
Not currently. Both endpoints return headline-level metadata: 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?+
Not directly. The 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.
Page content last updated . Spec covers 2 endpoints from sttinfo.fi.
Related APIs in FinanceSee all →
fred.stlouisfed.org API
Access data from fred.stlouisfed.org.
data.ecb.europa.eu API
Access official European Central Bank statistical series and observations to retrieve economic data like exchange rates, interest rates, and monetary aggregates. Browse available dataflows and retrieve specific time series data to analyze ECB's published economic indicators.
rba.gov.au API
Access Reserve Bank of Australia data including CPI inflation (current and historical), housing and business lending rates, AUD exchange rates, monetary policy/cash rate changes, and the RBA balance sheet.
cmegroup.com API
Get CME Group market data including FedWatch interest-rate probabilities, futures quotes and settlements, volume/open interest history, and options expirations and near-the-money option chains.
banks.data.fdic.gov API
Search FDIC-insured banks by location or institution, and access detailed information about their financial performance, merger history, deposit demographics, and regulatory changes. Get comprehensive data on bank failures, acquisitions, and historical financial trends to research institutions and analyze the banking landscape.
alphavantage.co API
Track stock prices, forex rates, and cryptocurrency values with real-time and historical market data, while accessing company financials, earnings reports, and technical indicators. Search tickers, monitor economic indicators, analyze news sentiment, and get global quotes all in one place.
polygon.io API
Access real-time and historical market data for stocks, cryptocurrencies, forex, and commodities—including price aggregates, ticker details, and financial statements—all from a single platform. Get the latest market news, check trading status across exchanges, and retrieve comprehensive ticker information to power your investment analysis and trading decisions.
polymarket.com API
Browse top Polymarket events and markets by volume/liquidity and view the Polymarket trader leaderboard (profit or volume) over common timeframes.