For live document coverage, country-specific availability, and pricing, see Coverage and pricing.
Key things to know before you start:
- The document list is dynamic. It depends on what the register actually holds for each company. A company may have 10 financial statements or none.
- Document categories are a fixed set. Every document is returned under one of the fixed keys of the
documentsobject (financialStatements,tradeRegisterExtract, etc.), with asubTypethat classifies it more precisely. See Document categories. - Retrieval is asynchronous because we query real government registers, not a cache. Use webhooks or polling.
- Documents are sorted newest first within each category. This is guaranteed.
- Document IDs are opaque. Always discover them via
availableDocumentsbefore requesting a download. IDs are generally stable across consecutive requests but we do not guarantee long-term stability, so do not store them permanently. - Prices are shown upfront. Each listed document includes a
pricein credits (or apriceMarkupwhen the price depends on the register’s fee). You are only charged when you request the download. - Documents arrive progressively. A company’s documents may come from multiple underlying sources (e.g., trade register + financial filings authority). Results are delivered incrementally via webhooks or polling. You don’t need to wait for the full list: act as soon as the document you need appears.
- Every document names its issuing register. Each document carries a
sourceobject identifying the register it comes from, in the same format asdataSources. See Document source.
How it works
Document retrieval follows a two-step process:Progressive delivery
For many countries, Topograph queries multiple underlying sources to build the full document list. For example, France combines the INPI register (for trade register extracts and articles of association) and the JOAFE (for official publications of associations). This meansavailableDocuments results arrive incrementally. Each webhook (or polling response) may contain more documents than the previous one. You don’t need to wait for the availableDocuments status to reach succeeded before acting: if the document you need is already in the list, you can request it immediately.
Step 1: List available documents
Request theavailableDocuments data point to discover which documents the register holds for a given company:
documents object of the response, grouped by category (see Document categories). Each entry describes a document. Listed documents that you have not requested yet carry no url:
Step 2: Request specific documents
Use theid values from step 1 to request the documents you need:
documents object of the response, grouped by category (see Document categories below). The document includes a temporary download URL.
You can combine both steps in a single request by including both
dataPoints: ["availableDocuments"] and documents: ["doc-id"]. The available documents list will arrive first, and the requested documents will follow.Document categories
Documents carry notype field. Their category is the key they sit under in the documents object, both when listed and when downloaded:
Within each array category, documents are always sorted by date descending (most recent first), so the most recent financial statement is
financialStatements[0]. The one exception is otherDocuments in Ireland, which follows the register’s own priority order.
Array categories can hold documents of several kinds. Each document carries a subType, a stable per-country classifier of the document kind. Use it rather than name to tell documents apart or to match them against the country’s documents catalog.
While the categories are fixed, the list of documents for a given company is dynamic. A company may have zero financial statements or ten. It depends entirely on what the register holds. This is why the
availableDocuments step exists.Document source
Every document in thedocuments object (listed or downloaded) carries a source field identifying the register that issues it. This is the same format as the dataSources section for company data:
Use
source.register to display the issuing authority to your users, or to apply per-register logic in countries where documents come from more than one register (e.g. France, where extracts come from INPI and certified K-bis extracts from Infogreffe).
Documents downloaded before this field was introduced may omit
source when re-read via GET /v2/company/{requestId}. Re-running the request returns the attributed version.Document IDs
Document IDs are opaque identifiers, typically UUIDs like1c932de4-4610-5506-b48d-4e62529d58e8. They are:
- Generated when you request
availableDocumentsfor a company - Generally stable across consecutive requests for the same company, so you can reuse them short-term
- Not guaranteed to be stable long-term. If you need a document days or weeks later, call
availableDocumentsagain to get fresh IDs
Downloading documents
Document download links are signed URLs with a 15-minute lifespan. To handle this:- Download immediately after receiving the URL, or
- Refresh the URL by calling
GET /v2/company/{requestId}. This regenerates fresh signed URLs at no additional cost
Re-fetching a request by
requestId is free and will not be billed again. Store your request IDs to refresh download links as needed.Document pricing
Each listed document includes aprice field indicating its cost in credits. Many documents are free (price = 0), while others (typically certified extracts or documents from paid registers) have a cost. For documents priced on the register’s fee, price can be absent until the fee is known; priceMarkup then gives the percentage applied to it.
You can check the price before purchasing by inspecting the documents listed after an availableDocuments request. Credits are only charged when you actually request the document for download.
Some documents are included at no extra cost when the matching data block is requested in the same call (or linked via 24-hour deduplication). Coverage is country-specific; see GET /v2/pricing and Coverage and pricing.
For details on blocks, deduplication, and budgets, see Pricing & Caching.
Automatic PDF conversion
Some registers publish documents in non-PDF formats. Topograph automatically converts them to PDF. Supported source formats:- Images: JPG, JPEG, PNG, TIFF, TIF
- Spreadsheets: CSV, XLS, XLSX
- Documents: DOC, DOCX, RTF, TXT, XPS
- Presentations: PPT, PPTX
- Web pages: HTML, HTM
- Signed containers: EDOC, ASiC-E
in_progress until processing completes (typically ~20 seconds). Once done, the document includes:
url: the original file from the registerpdfUrl: the PDF generated by Topograph
AI-powered financial data extraction
Financial statements are automatically parsed using AI to extract structured data: revenue, assets, liabilities, ratios, and more. This happens during document post-processing with no additional configuration. For the full data model and available fields, see Financial Data Extraction.Performance expectations
Document retrieval speed depends on the country and the register being queried:- Fast countries (France, Finland, Estonia…): available documents listed in seconds, documents downloaded in under a minute
- Medium countries (Belgium, Netherlands, Ireland…): 10-30 seconds for available documents, 1-2 minutes for downloads
- Slow countries (Germany, Spain…): available documents can take several minutes due to slow government registers
Best practices
- Always start with
availableDocuments: This ensures you have valid, current document IDs and know what’s available before purchasing. - Store request IDs: Keep the
requestIdto refresh download URLs for free within 24 hours. - Monitor document status: Check
request.dataStatus.documents[docId].status. Documents may bein_progresswhile being fetched or converted. - Handle timeouts gracefully: For slower registers, use webhooks or increase your polling timeout rather than abandoning the request.
- Check prices before downloading: Inspect the
price(orpriceMarkup) field of the listed documents to avoid unexpected charges.