SaaS Caller ID — Per-Country Outbound Numbers
Overview
When your SaaS platform makes outbound calls (sales, support, notifications), the caller ID shown to the recipient determines whether they answer. Calls from local numbers get 2-3x higher answer rates than calls from international or unknown numbers.
DIDfarm lets you provision local numbers in 70+ countries via API, assign them to users, tenants, or campaigns, and use them as outbound caller IDs on your SIP trunk.
Why Local Caller ID Matters
| Caller ID shown | Avg. answer rate | Trust level |
|---|---|---|
| Local number (+49 30...) | 45-65% | High — recognized area code |
| National number (+49 800...) | 30-45% | Medium — toll-free but impersonal |
| International number (+1 631...) | 10-20% | Low — unfamiliar country code |
| No caller ID / "Unknown" | 5-10% | Very low — spam signal |
Step 1 — Provision Numbers per Country
// Search for a local number in Germany
const search = await fetch(
'https://didfarm.com/api/v1/numbers/search?country=DE&type=local&limit=5',
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const available = await search.json();
// Order the first available number
const order = await fetch('https://didfarm.com/api/v1/numbers/order', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
numbers: [available.data[0].number],
}),
});
const result = await order.json();
console.log(result.number, result.status); // "+4930123456", "active"Step 2 — Assign Numbers to Users or Campaigns
Maintain a mapping in your database between DIDfarm numbers and your entities:
caller_id_pool: ┌────────────┬───────────────┬──────────┬─────────────┐ │ did_number │ country │ assigned │ entity │ ├────────────┼───────────────┼──────────┼─────────────┤ │ +4930123456│ DE │ yes │ tenant:acme │ │ +33123456 │ FR │ yes │ campaign:q4 │ │ +31201234 │ NL │ no │ (pool) │ │ +34911234 │ ES │ yes │ user:alice │ └────────────┴───────────────┴──────────┴─────────────┘
Step 3 — Make Outbound Calls with Local Caller ID
When your platform initiates an outbound call via SIP, set the From header to the local number assigned to the caller:
From: <sip:+4930123456@sip.didfarm.com> To: <sip:+4917612345678@sip.didfarm.com>
DIDfarm validates that the number belongs to your account and routes the call to the PSTN with the correct caller ID displayed.
API Automation
For SaaS platforms with many users or tenants, automate the entire number lifecycle:
async function onboardTenant(tenant) {
// For each country the tenant operates in, get a local number
for (const country of tenant.countries) {
// Search for available number
const search = await searchNumbers(country, 'local', 1);
if (search.data.length > 0) {
// Order the number
const number = await orderNumber(search.data[0].number);
// Assign to tenant's SIP trunk
await assignToTrunk(number.id, tenant.trunkId);
// Save mapping
await db.callerIdPool.create({
did_number: number.number,
country: country,
tenant_id: tenant.id,
});
}
}
}Multi-Tenant Architecture
For platforms serving multiple clients:
- Number pool per tenant — each tenant gets their own set of local numbers
- Dynamic selection — when making a call, pick the number matching the destination country
- Fallback logic — if no local number for the destination country, use a national number or your primary number
- Per-tenant billing — DIDfarm bills per number, making cost pass-through straightforward
Best Practices
- Use city-level numbers (not just country-level) for maximum answer rates
- Rotate numbers for high-volume outbound to avoid carrier spam flagging
- Set up CNAM (Caller Name) on each number so recipients see your company name
- Monitor answer rates per number — if a number gets flagged as spam, replace it
- Keep a spare number pool for quick replacement if a number gets reported
- Enable inbound calls on the same numbers so customers can call back
FAQ
Can I use a number from country A to call country B?
Yes. Any DIDfarm number can make outbound calls to any country. However, the caller ID will show the number's country code. For best answer rates, use a number from the same country as your recipient.
How many numbers can I provision?
There's no hard limit. Order as many numbers as you need via the portal or API. Volume discounts are available for 50+ numbers.
What about STIR/SHAKEN?
DIDfarm signs outbound calls with STIR/SHAKEN attestation where supported (US/CA). This helps prevent your calls from being marked as spam by recipient carriers.
Start provisioning caller IDs
Browse numbers in 70+ countries or automate via API.