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

How-to guide

How to Automate Email Outreach with a Sequencer (From a Free List to a Live Send)

Size the list for free, export only mailable addresses, load them into your sequencer and send small first. About 45 minutes and 500 records.

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

A sequencer sends your emails on a schedule. It does not find the people or check the addresses. So the work that decides your result happens before the sequencer: the list. This guide builds that list from the LeadOcean API and hands it to any sequencer that imports CSV or takes rows over an API.

TL;DR

  • Five steps: size the audience (free), export mailable work emails, check the file, import to the sequencer, send a small batch first.
  • Time: about 45 minutes for a 500-lead pilot. Most of it is sequencer setup, not data.
  • Records: 500 on the export. Sizing and the sequencer dry run spend none.

Prerequisites

  • A LeadOcean key in $LEADOCEAN_API_KEY. Start free at app.leadocean.io/register: 1,000 records, no card.
  • Bulk CSV export is not on Free. The export in step 2 needs Solo ($97 a month) or higher. On Free, pull a smaller list with POST /v1/people/search (25 people a page) instead.
  • A sending domain with SPF, DKIM and DMARC set, and a warmed mailbox. This is your sequencer's job, not ours.
  • A sequencer that imports CSV or has an API for leads. The ReachHQ import recipe shows one API path end to end.
  • curl and jq.

Step 1: Size the audience for free

Count before you pull. A count spends no records. Send count=true as a query parameter (not in the JSON body, which rejects unknown fields) and "limit": 1 in the body. meta.total is capped at 100,000.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jobLevel": ["VP"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["CA"],
    "emailStatus": ["verified", "catch_all_valid"],
    "emailType": ["work"],
    "limit": 1
  }' | jq '.meta | {total, totalIsExact, distinctCompanies}'

The same count runs from an AI client through the free leadocean_count_leads MCP tool. Enum values are exact strings: VP, not vp. Check them with leadocean_list_enum_values.

Step 2: Export only mailable addresses

Export with emailStatus set to verified and catch_all_valid. Several values inside one filter join with OR. Start with 500 rows, not the full list.

bash
curl -s -X POST https://api.leadocean.io/v1/exports \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "pilot VP sales CA",
    "filters": {
      "jobLevel": ["VP"],
      "jobFunction": ["Sales & Business Development"],
      "country": ["CA"],
      "emailStatus": ["verified", "catch_all_valid"],
      "emailType": ["work"]
    },
    "limit": 500,
    "columns": ["profile_first_name","profile_last_name","current_job_title",
                "current_company_name","current_company_domain","email_N_address","email_N_status"],
    "caps": {"emails": 1}
  }'

curl -s -H "x-api-key: $LEADOCEAN_API_KEY" https://api.leadocean.io/v1/exports/EXPORT_ID
curl -s -H "x-api-key: $LEADOCEAN_API_KEY" -o pilot.csv https://api.leadocean.io/v1/exports/EXPORT_ID/download

An export takes up to 50,000 rows a request and 500,000 a day. With caps set to one email, the CSV headers come back as email_1_address and email_1_status. You can also build the same export on the Exports page of the app, which shows the record price before you start.

Step 3: Check the file before you import it

Spend two minutes on the CSV. Three checks catch most of what goes wrong, and none of them costs a record.

bash
echo "rows, then rows with an email"
wc -l pilot.csv
awk -F, 'NR>1 && $6 != ""' pilot.csv | wc -l

echo "duplicate addresses"
cut -d, -f6 pilot.csv | sort | uniq -d

echo "status mix"
cut -d, -f7 pilot.csv | sort | uniq -c

Column numbers match the column order in step 2. The cut checks assume no commas inside fields; open the file in a spreadsheet if a title holds one. Remove duplicates by hand, and compare the status mix with the filter you asked for. Anything outside verified and catch_all_valid means the export filters were not what you meant. Also drop anyone you have already emailed or who sits on your suppression list. LeadOcean does not know your history.

Step 4: Import to the sequencer and map fields

Map four columns and nothing more: first name, company, title and email. Every extra merge field is one more way to send "Hi {{firstName}}" with the braces showing.

text
CSV column               Sequencer field
profile_first_name   ->  first_name
current_company_name ->  company
current_job_title    ->  title
email_1_address      ->  email

Drop any row where email_1_status is empty. Keep the status column out of the sequencer, but keep the file: it is your audit trail if a batch bounces.

Step 5: Send small, then gate the rest

Send the first 50 over two days. Read bounces before you load the other 450. LeadOcean gives no refund or credit-back for bounced emails, so the status filter is your only protection.

text
Campaign settings (names vary by sequencer)
  daily limit per mailbox:   30
  steps:                     3 emails, gaps of 3 and 5 days
  stop on:                   reply, bounce, unsubscribe
  launch:                    after a test send to your own inbox

Rule of thumb from this guide, not a vendor limit: if more than 2 in 100 of the first batch bounce, pause and re-check the list before sending more.

What you get

The count from step 1, run with the free leadocean_count_leads MCP tool on 2026-10-21:

json
{
  "total": 1602,
  "totalIsExact": true,
  "distinctCompanies": 1209,
  "credits": 0
}

That is people with a verified or catch_all_valid work email, VP level, Sales & Business Development, in Canada. It is a count of those filters, not a promise that every address is deliverable.

An export row, response shape from the API reference with placeholder values:

csv
profile_first_name,profile_last_name,current_job_title,current_company_name,current_company_domain,email_1_address,email_1_status
Jane,Doe,VP Sales,Acme,acme.com,jane.doe@acme.com,verified

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key headerCopy the key again from app.leadocean.io and check $LEADOCEAN_API_KEY is exported.
429Above the plan's rate limit: 5 a second on Free, 200 on AgencyRead Retry-After, slow the loop, or move to a higher plan.
402Records spentFree is 1,000 records for life. Upgrade on pricing.
Zero resultsEnum value spelled wrong, such as vp for VPList valid values with leadocean_list_enum_values or GET /v1/enums.
Export refusedOver 50,000 rows a request or 500,000 a day, or on FreeSplit the export by country, or use a paid plan.

FAQ

Does a sequencer find email addresses?

No. A sequencer sends and schedules. You bring the list, so get it from an email source with a status field, and keep only mailable rows.

How many emails should I send a day?

Start at 30 a mailbox a day, as in step 5. That figure is a conservative starting point from this guide, not a rule from any sequencer.

Can I do this on the free plan?

Partly. Sizing and search work on Free, inside the 1,000 one-off records. Bulk CSV export is not on Free, so a Free pilot means a few dozen rows by hand.

What if an address bounces?

Check email_status first. LeadOcean does not refund bounces, so exclude risky, unknown and catch_all from a first send. See how to find business email addresses and the best email finder for outreach. For tool choice, read cold email software for B2B sales.

Build your first outreach list free

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →