Surfe Webhooks: Real-Time Notifications Made Simple
What is a webhook?
Think of a webhook as a "special messenger" that automatically sends you data the moment something important happens. So you don’t have to keep checking manually. It’s like a notifier that does the worrying for you.
How Does It Work? Three Simple Steps
You give us a URL
This is like giving us an address where we can send a message. It’s called your webhook endpoint, a public URL that can accept a message (a
POST
request) from us.An event happens
For example, Surfe might finish enriching a contact. When that’s done, we automatically send the info to your URL, no polling required.
You say “Got it!”
Your server needs to reply with a
200 OK
—that’s your way of saying, “Thanks, I received the data.” If you send something else, we might try sending it again based on your settings.
What Event Can I Get Notified About?
Right now, Surfe supports:
person.enrichment.completed
— This tells you when a contact’s enrichment is done. It includes useful information like their name, email, job title, and more
When this event happens and you provided a webhookUrl
, Surfe sends:
{
"eventType": "person.enrichment.completed",
"data": {
"enrichmentID": "0198c820-d5f1-7c7f-a9f7-a19fc24846t7",
"person": {
"externalID": "Webhooktest-id",
"firstName": "David",
"lastName": "Chevalier",
"companyName": "Surfe",
"companyDomain": "surfe.com",
"linkedInUrl": "https://linkedin.com/in/david-maurice-chevalier",
"jobTitle": "Co-Founder & CEO",
"location": "Paris, Île-de-France",
"country": "France",
"emails": [
{
"email": "d.c@surfe.com",
"validationStatus": "VALID"
}
],
"mobilePhones": [
{
"mobilePhone": "+491111113211",
"confidenceScore": 0.95
}
],
"status": "COMPLETED"
}
}
}
This structure gives you everything you need to process the enriched data—no polling needed.
company.enrichment.completed
Get notified when Surfe finishes enriching details about a company, like their name, website, size, industry, etc.
Webhook event name: company.enrichment.completed
Sample payload:
{
"eventType": "company.enrichment.completed",
"data": {
"enrichmentID": "0198c823-0a32-7b13-a007-bc69376b003a",
"company": {
"externalID": "webhooktest-id",
"name": "Surfe",
"description": "SURFE is a company that specializes in LinkedIn prospecting and streamlining.",
"linkedInURL": "https://linkedin.com/company/leadjet",
"websites": [
"surfe.com",
"ftapi.com",
"evaneos.net"
],
"founded": "2020",
"revenue": "0-1M",
"employeeCount": 63,
"keywords": [
"marketing/advertising",
"computers electronics and technology > computers electronics and technology - other (in united states)",
"waterfall enrichment",
"outreach",
"crm",
"linkedin",
"prospecting",
"data",
"hubspot",
"salesforce",
"salesloft",
"copper",
"pipedrive",
"email finder",
"linkedin prospecting",
"streamlined",
"contact lists",
"crm integration",
"technology",
"enterprise-software",
"apps",
"internet",
"saas",
"sales automation",
"software"
],
"hqCountry": "FR",
"hqAddress": "52 rue chaussée d'antin, Paris, 75009, FR",
"industry": "Software",
"subIndustry": "Application Software",
"digitalPresence": [
{
"name": "X (Formerly Twitter)",
"url": "https://www.twitter.com/surfehq"
},
{
"name": "Facebook",
"url": "https://www.facebook.com/surfehq"
},
{
"name": "Instagram",
"url": "https://www.instagram.com/surfe.hq"
},
{
"name": "Instagram",
"url": "https://www.instagram.com/surfehq"
},
{
"name": "YouTube",
"url": "https://www.youtube.com/channel/uchin3orv1opldf4yz93qqxq"
},
{
"name": "Crunchbase",
"url": "https://www.crunchbase.com/organization/leadjet"
}
],
"fundingRounds": [
{
"name": "",
"amount": ,
"amountCurrency": "$",
"announcedDate": "",
"leadInvestors": [
""
]
},
{
"name": "",
"amount": ,
"amountCurrency": "$",
"announcedDate": "",
"leadInvestors": [
""
]
}
],
"ipo": {
"date":
"sharePrice":
"sharePriceCurrency":
},
"isPublic": false,
"followersCountLinkedin": 8896,
"followersCountLinkedi": 8896,
"status": "COMPLETED"
}
}
}
Why Use Webhooks Instead of Polling?
Automatic: No manual checking. You get updates right away.
Efficient: Your system isn’t kept busy asking for info over and over again.
Light on resources: Saves you time and computing power.
How to Set It Up in Plain English
When you send your enrichment request, include a
webhookUrl
insidenotificationOptions
.Make sure your server can accept
POST
requests and respond quickly with200 OK
.Handle the data when it arrives, maybe store it, process it, or trigger another action.
Here’s what the request looks like:
curl -X POST "https://api.surfe.com/v2/people/enrich" \
-H "Authorization: Bearer <your‑token>" \
-H "Content‑Type: application/json" \
-d '{
"include": {
"email": true,
"linkedInUrl": false,
"mobile": false
},
"notificationOptions": {
"webhookUrl": "https://your‑server.com/webhook"
},
"people": [
{
"companyDomain": "surfe.com",
"companyName": "Surfe",
"externalID": "external‑id",
"firstName": "David",
"lastName": "Chevalier",
"linkedinUrl": "https://..."
}
]
}'
Once the enrichment is done, you’ll receive the person.enrichment.completed
payload at your webhook endpoint
Summary Table
When You Do This… | Then This Happens… |
Provide a | Surfe sends updates automatically when enrichment completes |
Your server returns | Surfe knows you’ve received the data successfully |
You receive the payload in your system | You can then use or store the enriched information |
Need Help?
If you have any questions or need further assistance, feel free to reach out to our support team via Intercom.