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

How-to guide

How to Build an AI GTM Engineer Stack (Role, Skills and a Working Pipeline)

An AI GTM engineer turns a sales target into queries, agents and tables that run without a rep. Here is the stack in five steps, with the requests.

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

An AI GTM engineer is a technical operator who builds the systems that find, enrich and route prospects, and uses LLM agents for the judgment steps. This guide shows the role as a working stack you can run in 30 minutes.

TL;DR

  • The role is data engineering for sales: queries, enrichment, agents and routing. The deliverable is a pipeline that keeps running.
  • The stack has five parts: an ICP as filters, a sizing call, a search, an enrichment step and an agent or table to act on the rows.
  • Time: about 30 minutes. Cost: 0 records to size the audience, 30 records to run the pipeline on one page of 25 people plus 5 enrichments.

Prerequisites

  • A LeadOcean account on the Free plan: 1,000 records for life, no card, 5 requests a second. Sign up at app.leadocean.io.
  • An API key in your shell: export LEADOCEAN_API_KEY=...
  • curl and jq. Python or Node if you want to script the loop.
  • Optional: an MCP client such as Claude Code, pointed at https://api.leadocean.io/mcp (OAuth sign-in, no key pasted). The server exposes 13 tools.

What the role is

An AI GTM engineer owns the path from "who should we sell to" to "a row a rep or agent can act on". The AI part is where an LLM reads a profile, scores fit or drafts a first line. The engineering part is everything around it.

Four skills carry most of the job:

  • Data fluency. Know the fields, the enum values and what an email status means before a row is sent.
  • API scripting. Page with cursors, handle 429 and 402, keep keys out of code.
  • Agent wiring. Give an LLM tools (MCP or function calls) and keep it from spending records on guesses.
  • Sales judgment. Pick filters that match a buyer a rep would call.

For the wider definition, see what is a GTM engineer. For hiring and career data, see the GTM engineer report.

The stack, in one table

Each part has one job. Swap the tool, keep the job.

PartJobWhere it runs
Data APIFilters, search, enrich, exportshttps://api.leadocean.io
Sizing callCount before you spendcount=true, leadocean_count_leads
AgentScore fit, draft, decide who to enrichAn MCP client such as Claude Code
Table or workflowJoin the data to other sources and schedule runsClay or n8n
DestinationCRM or sequencer, owned by your teamNot part of LeadOcean

LeadOcean covers the data layer and the MCP server. It has no sequencer, dialer, CRM or Chrome extension, so the last row is always a tool you already use. The app at app.leadocean.io adds an Exports page: filter builder, column picker, price preview and CSV download. Use it when a rep wants a file, not an API.

What separates a good one from a busy one

Good GTM engineers measure before they build. They size the audience, pull 25 rows, read them, and only then write the loop.

They also keep spend visible. A search page of 25 is 25 records, a count is free, and a miss on enrich is free. A script that enriches every row from a loose filter burns a Free plan in one run.

Last, they read email_status on every row. LeadOcean does not refund bounced emails, so the filter has to happen before the send, not after.

A realistic first week

Day one is the ICP and the sizing calls. Write three filter sets, count each, and keep the one with a count you can work: a few thousand, not a few million.

Day two is search and enrichment on small pages. Pull 25 rows per set, read them, and tighten the title filters until the rows look like buyers.

Day three is the agent. Give it the count, search and enum tools, and a written rule for when it may spend records. Log every call it makes.

Days four and five are routing and review. Push the rows to your CRM or sequencer, check bounce rates after the first send, and write down what you would change.

Step 1: Write the ICP as filters

Turn the target into fields before you touch any tool. Filters are arrays of strings, and enum values are exact.

json
{
  "title": ["Head of Growth", "VP Marketing"],
  "country": ["US"],
  "jobLevel": ["VP", "Director"],
  "employeeRange": ["51-200", "201-500"]
}

Check enum spellings first. Seniority values are lowercase (c_suite, vp, director), while jobLevel uses C-Team, VP, Director. You can list them for free:

bash
curl -s https://api.leadocean.io/v1/enums \
  -H "x-api-key: $LEADOCEAN_API_KEY" | jq 'keys'

Step 2: Size the audience before you spend

Count first. If the number is wrong, change the filters, not the budget. Send count=true as a query parameter with limit=1. Sizing costs nothing.

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 '{"title":["Head of Growth","VP Marketing"],"country":["US"],"employeeRange":["51-200","201-500"]}' \
  | jq '.meta'

meta.total is capped at 100,000, and meta.countOnly is true. For companies, GET /v1/companies/count does the same job with breakdowns by industry, headcount band and HQ country.

Step 3: Search a page of people

Pull one page of 25 and read it before you pull more. Limit runs 1 to 100, and you page with cursor.

bash
curl -s https://api.leadocean.io/v1/people/search \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"title":["Head of Growth","VP Marketing"],"country":["US"],"employeeRange":["51-200","201-500"],"limit":25}' \
  | tee page1.json | jq '.meta'

This spends 25 records. One search pages to 10,000 rows by default. If meta.depthCapped is true, narrow the filters instead of walking the index.

Step 4: Enrich the rows that pass your filter

Do not enrich everyone. Let a script or an agent drop rows first, then enrich by person_id, which each search row carries at meta.source_ids.person_id. Enrich takes exactly one of linkedin_url, email, phone or person_id. There is no name plus domain lookup, so search by domain first.

bash
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":"PERSON_ID_FROM_SEARCH","reveal_email":true}'

Since October 2026, enrich also returns career history in resume_data: past roles, education, certifications and awards. Past employers carry no company_id yet. An enrichment that finds nobody is a 404 and costs nothing.

Step 5: Hand the rows to an agent or a table

This is the AI step. Give an agent the MCP tools and a rule: size first, search small, enrich only what scores well.

text
You are a GTM engineer agent. Goal: 10 VP-level marketing leads at US
companies with 51-500 employees.
1. Call leadocean_count_leads with these filters. Report the total.
2. If the total is under 5,000, call leadocean_search_leads with limit 10.
3. Score each row 1-5 on fit from title and company. Drop below 4.
4. Never call leadocean_find_phone or get_lead without my approval.

For a table-based version, Clay can call an HTTP API from a column. See our Clay integration and n8n integration for the request setup. Both tools document their own limits, so read those before you size a run.

What you get

The sizing call returns a count with no data. Here is the free count for the role this page is about: leadocean_count_leads on 2026-10-21, title GTM Engineer, worldwide.

json
{
  "total": 475,
  "totalIsExact": true,
  "totalAll": 1617,
  "distinctCompanies": 404,
  "credits": 0
}

That is 475 people with a verified, catch_all_valid or catch_all email, the tool's default. With no email condition the title matches 1,617 people across all employers. The 475 span 404 companies.

The record-level response below is the response shape from the API reference, with placeholder values.

json
{
  "success": true,
  "data": [
    {
      "profile_data": { "profile_full_name": "Jane Doe" },
      "contact_data": {
        "has_email": true,
        "email_status": "verified",
        "contact_current_experiences": [{ "job_title": "VP Marketing", "company_name": "Acme", "company_domain": "acme.com" }]
      },
      "meta": { "source_ids": { "person_id": "1234567890" } }
    }
  ],
  "meta": { "count": 1, "limit": 25, "credits": 1, "nextCursor": null }
}

A search row has no address. Enrich with reveal_email to get contact_data.contact_emails[]. The full shape is in api.leadocean.io/openapi.json.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-keyRe-export $LEADOCEAN_API_KEY; keys are per plan (1 on Free)
429Above the plan rate limit: 5 requests a second on Free, 200 on AgencyHonor Retry-After; add a short sleep between pages
402Records spent (1,000 for life on Free)Check GET /v1/account; move to Solo at $97 a month or Agency at $497
Empty resultsEnum value spelled wrong, such as Vp for VPList exact values with GET /v1/enums or leadocean_list_enum_values
404 on enrichNobody matched the inputFree. Try another identifier, or search by domain first
Export refusedOver 50,000 rows a request or 500,000 a day; bulk CSV is not on FreeSplit the export, or use Solo or Agency

FAQ

What does an AI GTM engineer do all day?

They build and maintain pipelines: audience sizing, search, enrichment, scoring and routing. Most of the week is fixing data issues and tuning filters, not writing prompts.

Is it a sales job or an engineering job?

It sits between the two. The best fit is someone who can read an API reference and also knows what a rep wants in a row.

Which skills matter most?

Scripting against REST APIs, reading email status, and giving agents safe tools. Prompting is the smallest part.

What does the stack cost to start?

LeadOcean Free costs $0 and gives 1,000 records for life. Solo is $97 a month for one person and Agency is $497 a month for teams. See pricing.

Where do I read more about the role?

Start with what is a GTM engineer and the solutions page for GTM engineers. Every guide is in the blog.

Build your first GTM pipeline on 1,000 free records

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

Get your free API key →