Resource
Accounts
Accounts represent companies in your CRM (Salesforce "Accounts", HubSpot "Companies", etc.). Sync them so we can match funding events directly to entities in your pipeline.
POST /api/v1/accounts
Upserts up to 1,000 accounts in a single call. The upsert key is (your_user_id, external_id) — repeat calls with the same external_id update the row in place.
Request body
{
"accounts": [
{
"external_id": "0014x000007xY3oAAE", // required: your CRM's account ID
"name": "Vellum AI", // required
"domain": "vellum.ai", // optional but strongly recommended
"metadata": { // optional: stored as JSONB, returned in matches
"industry": "AI",
"owner_email": "rep@yourco.com",
"stage": "qualified"
}
}
]
}Field reference
| Field | Type | Required | Notes |
|---|---|---|---|
external_id | string | yes | Your CRM's ID for this account. Used as the upsert key. |
name | string | yes | Company name. Used for the account_name match path. |
domain | string | no | e.g. vellum.ai. Highest-precision match key. We normalize (strip https://, www., paths). |
metadata | object | no | Arbitrary JSON. Returned unchanged when this account is in a match payload. |
Response (200)
{
"upserted": 247,
"errors": [
{ "index": 12, "error": "external_id is required and must be a non-empty string" }
]
}Per-row errors don't fail the batch — valid rows are still upserted. Check the errors array for rows that didn't make it in.
Limits
- Max 1,000 accounts per request
- For larger CRMs, paginate client-side
- Daily quota tracked under
crm_accounts_upsert
DELETE /api/v1/accounts
Removes a single account by external_id. Cascade-deletes any match_notifications tied to this account.
curl -X DELETE "https://fundingscout.io/api/v1/accounts?external_id=001A1" \
-H "Authorization: Bearer $FS_KEY"
# Response:
# { "deleted": 1 }Best practices
- Always send domain when you have it. Domain matching is the most precise of the three match paths. Without it, you fall back to fuzzy-name matching.
- Don't send empty/test data. Each row counts against your account quota. Filter dummy records server-side.
- Use stable external_ids. The
external_idshould be your CRM's primary key for the record (Salesforce ID, HubSpot vid, etc.) — not something that changes when the account is renamed or merged. - Run sync daily, not hourly. Funding rounds are emitted within ~60 seconds of press releases, so once a day is plenty. Hourly is fine if you want fresher data, but more than that is wasted compute.