A Sendoso campaign is only as good as the list behind it. Sendoso handles gifts, direct mail and fulfillment. You still have to decide which accounts get a send and who inside each account opens the box.
Sendoso describes itself as a gifting and direct mail platform that ships to 165+ countries and connects to your CRM (Sendoso, October 2026). Its plan prices are not public: the pricing page is a quote form (Sendoso pricing, October 2026). No public price, so budget a sales call before you plan volume.
TL;DR
- Size the account list for free, pull one buyer per account, then enrich them for a verified email so each recipient can get Sendoso's address confirmation link.
- It takes about 40 minutes and spends about 100 LeadOcean records, inside the free 1,000.
- LeadOcean returns the people and companies. It does not send gifts, store addresses or run campaigns. Sendoso does that.
Prerequisites
- A free LeadOcean key in
$LEADOCEAN_API_KEY(start free, no card: pricing). curlandjq.- A Sendoso account.
Step 1: Size the account list before you spend anything
Count companies first. The count is free and spends no records.
curl -s "https://api.leadocean.io/v1/companies/search?count=true&limit=1" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"industry": ["Software Development"],
"employeeRange": ["1001-5000"],
"hqCountry": ["US"]
}' | jq '.meta'On 2026-10-21 the free MCP tool leadocean_count_companies returned 758 US-headquartered software companies with 1001-5000 employees. California held 223 of them, New York 68, Texas 59.
That is too many for a gifting program. Gifts cost real money per send, so tier the list. Pick the 50 accounts that match your best customers and send to those.
Work backwards from budget. Divide the quarter's gifting budget by your all-in cost per send, and that is the list length. Sendoso quotes by sales call, so get the per-send cost first. Do not pull a thousand rows you hope to trim later.
Step 2: Tier the accounts by what they run
A gift needs a reason. Technology is a cheap one: the company already runs the tool your product plugs into. Add technologies to the same count.
curl -s "https://api.leadocean.io/v1/companies/search?count=true&limit=1" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"industry": ["Software Development"],
"employeeRange": ["1001-5000"],
"hqCountry": ["US"],
"technologies": ["Salesforce"]
}' | jq '.meta'On 2026-10-21 leadocean_count_companies returned 53 companies with that filter, 22 of them in California. Technology data comes from LeadOcean's own site crawl, about 7.8M sites, so a company outside the crawl never matches. Treat 53 as a floor, not the market.
Fifty-three is a program you can afford to gift. Seven hundred and fifty-eight is not.
Step 3: Size the buying committee
Decide who gets the box before you pull anyone. Gifting one champion is cheap. Gifting the champion and the budget owner is the ABM play.
curl -s "https://api.leadocean.io/v1/people/search?count=true&limit=1" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"industry": ["Software Development"],
"employeeRange": ["1001-5000"],
"hqCountry": ["US"],
"jobLevel": ["VP", "Director"],
"jobFunction": ["Advertising & Marketing"],
"emailStatus": ["verified", "catch_all_valid", "catch_all"]
}' | jq '.meta'The same filters through leadocean_count_leads on 2026-10-21 returned 4,406 VPs and Directors in marketing with a verified, catch_all_valid or catch_all email, across 427 companies. Without the email condition it matched 7,508. Note which number you quote.
Step 4: Pull one buyer per target account
Search by domain for your 50 target accounts. One search page of 50 is 50 records. Search rows carry email flags, not addresses, so Step 5 adds the address.
curl -s https://api.leadocean.io/v1/people/search \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"domain": ["acme.com", "acme.io", "example.com"],
"jobLevel": ["VP", "Director"],
"jobFunction": ["Advertising & Marketing"],
"emailStatus": ["verified"],
"limit": 50
}' > buyers.jsonSearch is a flat JSON body, filters are arrays, and limit runs 1 to 100. Page on with cursor. To see everyone at one account, call GET /v1/companies/{domain}/people.
Keep one or two people per company. A box to six people at the same firm looks like a mistake.
Pick the titles by who signs the deal. For a marketing tool that is the VP or Director of Marketing. For a sales tool it is the VP of Sales. Change jobFunction to Sales & Business Development and jobLevel as needed. Check exact strings with leadocean_list_enum_values, because enum values are case sensitive.
Step 5: Enrich the people you will gift
Sendoso supports a handwritten note in the box (Sendoso, October 2026). A note that names a real fact beats "thought of you". Enrich returns the email with reveal_email, and since 2026-10-17 it also returns past roles, schools and awards.
mkdir -p enriched
jq -r '.data[].meta.source_ids.person_id' buyers.json | while read -r id; do
curl -s -X POST https://api.leadocean.io/v1/people/enrich \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d "{\"person_id\": \"$id\", \"reveal_email\": true}" > "enriched/$id.json"
done
jq '.data.resume_data' enriched/*.json | head -40Enrich takes exactly one of linkedin_url, email, phone or person_id. A person we hold nothing for is a 404 and costs nothing. Past employers carry no company_id yet, so match them by name.
Step 6: Keep only recipients you can reach
Sendoso can send the recipient a secure address confirmation link, or take an address you upload (Sendoso, October 2026). The link goes to an email, so the email has to land.
jq -r '.data
| select(.contact_data.email_status == "verified")
| [.meta.source_ids.person_id,
.profile_data.profile_full_name,
.contact_data.contact_current_experiences[0].company_name,
.contact_data.contact_emails[0].email]
| @csv' enriched/*.json > sendoso_list.csvWe do not refund bounces, so read email_status before you use the file. Print one enriched file first and confirm the field names. Then add each person to Sendoso the way its own docs describe.
For a bigger list on a paid plan, POST /v1/exports returns up to 50,000 rows a request and 500,000 a day. The app at app.leadocean.io has an Exports page with a filter builder, column picker and price preview.
Step 7: Plan the follow-up before the box ships
A gift without a next step is a nice day for the recipient and nothing for you. Pick the follow-up now, while you still hold the data.
- Day 0: the box ships. Send no email yet.
- Delivery day: one short email from the rep who signed the note. Name the fact from Step 5. Ask one question.
- Day 3 after delivery: call the VP or Director who did not reply, using
GET /v2/people/phonefor the number. That call spends one record, including a miss. - Day 7: a reply to your own email with one data point about their account.
Keep this in the tool you send email from. For ready-made sequences see outbound playbooks.
Write the owner for each account in the same CSV as the contact. When a box lands, nobody should ask who is calling.
What you get
One enriched person, response shape from the API reference, with placeholder values (not a real person):
{
"success": true,
"data": {
"profile_data": { "profile_full_name": "Jane Doe" },
"contact_data": {
"has_email": true,
"email_status": "verified",
"contact_emails": [{ "email": "jane.doe@acme.com", "type": "work", "status": "verified" }],
"contact_current_experiences": [{ "company_name": "Acme" }]
},
"resume_data": { "experiences": [], "educations": [] },
"meta": { "source_ids": { "person_id": "1234567890" } }
}
}Counts from the free MCP tools, 2026-10-21:
| Query | Result |
|---|---|
| US software companies, 1001-5000 employees | 758 companies |
| Same accounts, VP or Director in marketing, mailable (verified, catch_all_valid or catch_all) | 4,406 people at 427 companies |
| Same people, any email status | 7,508 people |
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key | Copy the key from app.leadocean.io and export it again |
| 429 | Above the plan rate limit (5 a second on Free, 200 on Agency) | Honor Retry-After, or move to a higher plan |
| 402 | Records spent (Free has 1,000 for life) | Check GET /v1/usage, then pick a plan on pricing |
| Empty results | A bad enum value, such as vp instead of VP for jobLevel | Check exact strings with leadocean_list_enum_values |
| 404 on enrich | Nothing held for that person | No cost. Try another person_id |
| Export refused | Over 50,000 rows a request or 500,000 a day, or on Free | Split the export. Bulk CSV is not on Free |
FAQ
Does LeadOcean replace Sendoso?
No. Sendoso sends gifts and direct mail. LeadOcean supplies the people and companies you choose to send to. The two do different jobs.
How do I get the shipping address?
Use an address confirmation step, such as the link Sendoso offers, so the recipient says where the box should go. LeadOcean gives you the email that link is sent to.
How many records does a 50-account program cost?
About 100 here: 50 from one search page and 50 enrichments. Counting costs nothing, and an enrichment that finds nobody costs nothing.
Can I run this from Claude instead of curl?
Yes. LeadOcean has a hosted MCP server with 13 tools. See Claude for sales enablement for the setup.
Where do ABM and outbound fit together?
Gifts open doors. Email and calls walk through them. See ABM and outbound playbooks for the sequence around the send.
What if a target account has no verified email?
Skip it for this send, or find the buyer another way. Add hasMailableContacts to the company search to keep only accounts with at least one mailable person. That filter saves you from shipping to a company you cannot follow up with.
Should I gift before or after the first email?
After. A cold box with no context reads as a stunt. Send one short email first, then ship to the people who opened or replied, and use Step 7 for the follow-up.
Build your ABM send list on real data, free.
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →