Business registry data is one of the most useful — and most underused — data sources available to developers. If your application needs to verify a company's legal existence, check its financial standing, autofill company information from a VAT number, or perform due diligence at scale, a company data API can save you months of scraping work.
This guide covers what company data APIs actually expose, how to evaluate them, and a practical walkthrough of what you can build.
What Business Registry Data Contains
Depending on the country and data source, business registry records can include:
- Legal company name and registered address
- VAT number / tax code / company registration number
- Legal form (LLC, corporation, sole trader, etc.)
- Registered capital
- Date of incorporation
- Legal representative and board members
- Annual financial filings (revenue, assets, liabilities, profit/loss)
- SIC/ATECO industry classification codes
- Company status (active, dissolved, in liquidation, bankrupt)
- Court proceedings and judgments (in some jurisdictions)
Not all jurisdictions expose all of this. The UK (Companies House) and Denmark are unusually open. Italy publishes core data via the Chamber of Commerce (CCIAA) but charges for full financial data. The US has no single national registry — you work with state-level records, which are inconsistent in both format and completeness.
Evaluating a Company Data API
Before integrating, ask these questions:
1. Coverage: What countries are covered? What percentage of active companies in those countries are in the database? A 60% coverage rate sounds impressive until you realize that the 40% missing includes many legitimate businesses.
2. Freshness: How often is the data updated? Annual financial filings can be 12-18 months old by the time they're filed, processed, and indexed. For risk assessment, you want signals that reflect current reality, not last year's situation.
3. Financial depth: Does the API return raw financial figures, or does it normalize them into comparable metrics? Knowing that Company X reported €2.1M in assets is less useful than knowing its debt-to-asset ratio relative to industry benchmarks.
4. Scoring vs. raw data: Some APIs return raw registry data. Others return processed scores. You may want both — the score for quick checks, the raw data for custom analysis.
5. Rate limits and pricing: For bulk lookups (screening a list of suppliers, running nightly checks on your client portfolio), rate limits matter enormously. A limit of 100 requests/hour makes batch processing impractical.
Practical Use Cases
VAT Number Validation and Autofill
The simplest use case: a user types their company VAT number into your registration form, and you autofill their company name, address, and other details. This reduces friction and errors.
async function autofillCompanyData(vatNumber) {
const response = await fetch(
`https://api.get-scala.com/score/company?vat=${vatNumber}`,
{ headers: { Authorization: `Bearer ${API_KEY}` } }
);
const data = await response.json();
return {
name: data.company_name,
address: data.registered_address,
city: data.city,
country: data.country,
status: data.status,
score: data.financial_health_score
};
}
Supplier Screening Pipeline
You have a list of 500 suppliers. You want to flag any that are at financial risk before renewing contracts. Run them through the API in batch, filter by score threshold, and export a report.
async function screenSupplierList(suppliers) {
const results = await Promise.allSettled(
suppliers.map(s =>
fetch(`https://api.get-scala.com/score/company?vat=${s.vatNumber}`)
.then(r => r.json())
.then(data => ({ ...s, score: data.score, riskCategory: data.risk_category }))
)
);
return results
.filter(r => r.status === 'fulfilled')
.map(r => r.value)
.sort((a, b) => a.score - b.score); // lowest scores first
}
Real-Time Risk Monitoring
Monitor your active client portfolio on a rolling basis. Set up a nightly job that checks scores and triggers alerts when a client's score drops below a threshold.
// Run nightly via cron
async function monitorClientPortfolio(clients) {
for (const client of clients) {
const current = await getScore(client.vatNumber);
const previous = await db.getLastScore(client.id);
if (current.score < RISK_THRESHOLD || current.score < previous.score - 10) {
await sendAlert({
clientName: client.name,
previousScore: previous.score,
currentScore: current.score,
riskCategory: current.risk_category
});
}
await db.saveScore(client.id, current);
}
}
The Score API from S.C.A.L.A.
The S.C.A.L.A. company score exposes a REST API covering Italian and European company data. The free tier allows a limited number of lookups per month, suitable for prototyping. Paid tiers (API Starter at €19/month for 500 calls, API Growth at €49/month for 5K calls) cover most production use cases.
The response schema includes:
{
"company_name": "Acme Srl",
"vat_number": "IT12345678901",
"status": "active",
"score": 74,
"risk_category": "low",
"revenue": 2100000,
"employees_range": "10-49",
"last_filing_year": 2023,
"legal_form": "Srl",
"ateco_code": "62.01",
"city": "Milano",
"region": "Lombardia"
}
Handling Data Quality Issues
Registry data is messy. Build defensively:
- Always validate VAT number format before hitting the API (saves quota)
- Handle
nullfields gracefully — not all companies file all data - For scoring, treat missing financial data as a signal, not just a gap
- Cache results with appropriate TTL (24 hours for most use cases, shorter for high-risk monitoring)
- Log API errors separately from data quality issues — they require different handling
Limitations to Be Aware Of
Company data APIs are powerful but not omniscient. What they cannot tell you:
- Real-time cash position (filings are historical)
- Off-balance-sheet liabilities
- Key person risk (what happens if the founder leaves)
- Market and competitive position
- Qualitative factors that experienced analysts pick up in conversation
Use the score as a first filter, not a final judgment. For large transactions, it surfaces which companies warrant deeper investigation — it does not replace that investigation.
The S.C.A.L.A. Score API documentation and free tier are available at get-scala.com/score/. API keys require registration at get-scala.com.
Top comments (0)