Your CRM is full of company names. But how many have verified registration numbers? Up-to-date addresses? Confirmed active status?
Most CRM records are entered manually by sales reps — and they decay fast. Studies show that 30% of B2B data goes stale every year. Enrichment services from ZoomInfo or Clearbit cost thousands per month.
This tutorial shows you how to enrich your CRM data using the S.C.A.L.A. Score API — 272M companies across 265 countries, starting free.
What You'll Build
A pipeline that takes company names from your CRM and enriches them with:
- Official registration number
- Company status (active/dissolved)
- Registered address
- Incorporation date
- Officers (where available)
- Industry codes
Method 1: JavaScript Script (Direct API)
Install the SDK:
npm install scala-score
Create an enrichment script:
const ScalaScore = require('scala-score');
const fs = require('fs');
const client = new ScalaScore({ apiKey: process.env.SCORE_API_KEY });
// Your CRM export (CSV with company names and countries)
const companies = [
{ name: 'Bosch', country: 'DE' },
{ name: 'LVMH', country: 'FR' },
{ name: 'Ferrero', country: 'IT' },
{ name: 'Volvo', country: 'SE' },
{ name: 'Nestlé', country: 'CH' }
];
async function enrichCompany(name, country) {
try {
const result = await client.search({ name, country, limit: 1 });
if (result.companies.length > 0) {
const co = result.companies[0];
return {
input_name: name,
matched_name: co.name,
registry_id: co.registry_id,
status: co.status,
address: co.address,
incorporation_date: co.incorporation_date,
country: co.country
};
}
return { input_name: name, matched_name: null, error: 'Not found' };
} catch (err) {
return { input_name: name, matched_name: null, error: err.message };
}
}
async function main() {
const results = [];
for (const co of companies) {
const enriched = await enrichCompany(co.name, co.country);
results.push(enriched);
console.log(`OK ${co.name} -> ${enriched.matched_name || 'NOT FOUND'}`);
}
// Write results to JSON
fs.writeFileSync('enriched.json', JSON.stringify(results, null, 2));
console.log(`\nEnriched ${results.length} companies -> enriched.json`);
}
main();
Output:
OK Bosch -> Robert Bosch GmbH
OK LVMH -> LVMH Moet Hennessy Louis Vuitton SE
OK Ferrero -> Ferrero S.p.A.
OK Volvo -> AB Volvo
OK Nestle -> Nestle S.A.
Enriched 5 companies -> enriched.json
Method 2: n8n Workflow (No Code)
If you use n8n for automation, there's a dedicated Score API node:
npm install n8n-nodes-scala
Workflow Setup
- Trigger: Schedule (daily/weekly) or webhook
- CRM Node: Read contacts from HubSpot/Salesforce/Pipedrive
- Score API Node: Enrich each company
- CRM Node: Write enriched data back
In n8n, the workflow looks like this:
[Schedule Trigger]
|
[HubSpot: Get Companies]
|
[S.C.A.L.A. Score: Search Company]
|
[IF: Match Found?]
| Yes | No
[HubSpot: Update] [Flag for Review]
The Score API n8n node handles authentication, pagination, and error handling automatically. Just add your API key in the credentials and connect the nodes.
Method 3: MCP Server (AI-Powered Enrichment)
For AI-assisted workflows, use the Score MCP server:
npx scala-mcp-server
This exposes Score API data to any MCP-compatible AI client (Claude, custom agents, etc.). Your AI assistant can then:
- Look up companies conversationally
- Enrich data on the fly during chat
- Cross-reference multiple sources
Claude Desktop Configuration
Add to your MCP settings:
{
"mcpServers": {
"scala-score": {
"command": "npx",
"args": ["scala-mcp-server"],
"env": {
"SCORE_API_KEY": "your-api-key-here"
}
}
}
}
Then ask Claude: "Look up Siemens AG in the Score database and tell me their registration status and address."
Method 4: Python + CSV Export
import requests
import csv
API_KEY = "your-api-key"
BASE_URL = "https://score.get-scala.com/api/v1"
def enrich(name, country):
response = requests.get(
f"{BASE_URL}/search",
params={"q": name, "country": country, "limit": 1},
headers={"Authorization": f"Bearer {API_KEY}"}
)
data = response.json()
if data.get("companies"):
return data["companies"][0]
return None
# Read from CRM export
with open("crm_export.csv") as f:
reader = csv.DictReader(f)
companies = list(reader)
# Enrich and write output
with open("enriched.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["Input Name", "Matched Name", "Registry ID",
"Status", "Country", "Address"])
for co in companies:
result = enrich(co["name"], co["country"])
if result:
writer.writerow([
co["name"], result["name"], result.get("registry_id", ""),
result.get("status", ""), result["country"],
result.get("address", "")
])
print(f"OK {co['name']} -> {result['name']}")
else:
writer.writerow([co["name"], "NOT FOUND", "", "", "", ""])
print(f"MISS {co['name']} -> not found")
How Much Does It Cost?
Enriching 500 CRM records per month: €19/month (Starter plan).
Enriching 5,000 records: €49/month (Growth plan).
Compare that to:
- ZoomInfo: $15,000+/year
- Clearbit: $12,000+/year for enrichment
- D&B: €2-5 per lookup = €1,000-2,500 for 500 records
Score API is 25-130x cheaper for the same company verification data.
Get Started
- Sign up free: score.get-scala.com
- Get your API key (instant, no credit card)
- Choose your integration method:
-
JavaScript:
npm install scala-score -
n8n:
npm install n8n-nodes-scala -
MCP:
npx scala-mcp-server - REST API: Any language, any platform
-
JavaScript:
50 free lookups/month — enough to prove the value before you spend anything.
Top comments (0)