Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Build a Sendoso ABM Send List (With Real Account and Contact Data)

Sendoso sends the gift. It does not tell you who should get one. Build the account list and the buying committee first, then load it.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

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).
  • curl and jq.
  • A Sendoso account.

Step 1: Size the account list before you spend anything

Count companies first. The count is free and spends no records.

bash
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.

bash
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.

bash
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.

bash
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.json

Search 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.

bash
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 -40

Enrich 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.

bash
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.csv

We 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/phone for 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):

json
{
  "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:

QueryResult
US software companies, 1001-5000 employees758 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 status7,508 people

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-keyCopy the key from app.leadocean.io and export it again
429Above the plan rate limit (5 a second on Free, 200 on Agency)Honor Retry-After, or move to a higher plan
402Records spent (Free has 1,000 for life)Check GET /v1/usage, then pick a plan on pricing
Empty resultsA bad enum value, such as vp instead of VP for jobLevelCheck exact strings with leadocean_list_enum_values
404 on enrichNothing held for that personNo cost. Try another person_id
Export refusedOver 50,000 rows a request or 500,000 a day, or on FreeSplit 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 →