Build a target account list from plain words

Describe your market in a few plain sentences and get a list of matching companies, grown with their competitors and checked with a profile. Code included.

A short line of text on a card, with arrows to a growing stack of company cards

A TAM list is the list of companies that could buy what you sell. Most teams build it from a database filter: an industry code, a country and a headcount range. Industry codes are wide, so the list mixes the companies you want with many that do not fit.

This guide builds the list the other way. You describe what your buyers do, in plain words. The API returns the companies that match by meaning, and you grow the list from the best ones. Each step is one call that you can run from a terminal.

What you need

  • An API key. Get one free; the trial credits are enough for a first list.
  • curl and jq in a terminal.
export INNERFETCH_API_KEY="<your API key>"

Step 1: describe your market in a few phrases

Write three to five short phrases. Each phrase says one thing your buyers do or sell. Use the words a buyer uses, not your own product words. Our example is the market for a help desk:

cat >market.txt <<'EOF'
help desk software for customer support teams
shared inbox for support e-mail
live chat widget for websites
knowledge base software for self-service help
EOF

Step 2: search each phrase

Send each phrase to the search call. Keep the companies that more than one phrase finds at the top: they are the core of your market.

while read -r phrase; do
  curl -sG https://api.innerfetch.com/api/v1/company/search \
    --data-urlencode "q=$phrase" -d max_results=50 \
    -H "X-API-Key: $INNERFETCH_API_KEY" |
    jq -c --arg q "$phrase" '.results[] | {domain, name, industry: .card.industry, match: .match_score, query: $q}'
done <market.txt >search.jsonl

jq -s 'group_by(.domain) | map(.[0] + {queries: map(.query)})
  | sort_by(-(.queries | length), -.match)' search.jsonl >seed.json

A search shows only strong matches, so a phrase can return fewer rows than you ask for. An empty answer is free.

Step 3: grow the list with competitors

The companies at the top of seed.json are your best matches. Ask for their competitors. A competitor of a company in your market is very often in your market too.

jq -r '.[:5][].domain' seed.json | while read -r domain; do
  curl -sG https://api.innerfetch.com/api/v1/company/competitors \
    -d domain="$domain" -d limit=25 \
    -H "X-API-Key: $INNERFETCH_API_KEY" |
    jq -c '.competitors[] | {domain, name, industry: .card.industry, basis}'
done >more.jsonl

Rows with the basis evidenced have a public page that compares the two companies. Rows with the basis similar are companies in the same market. Keep both for a TAM list.

Step 4: merge and export

Merge the two lists by domain and write a CSV that you can open in a spreadsheet or import into your CRM.

jq -s '[.[] | {domain, name, industry}] | unique_by(.domain)' search.jsonl more.jsonl >tam.json
jq -r '.[] | [.domain, .name, .industry] | @csv' tam.json >tam.csv

Step 5: add a profile and check the list

Add headquarters, headcount and tech stack with the batch call, up to 50 domains at a time. Then read the list once. A short look removes the companies that match the words but not the market, and it shows you a phrase to add or remove for the next run.

jq -c '[.[].domain] | range(0; length; 50) as $i | {domains: .[$i:$i + 50]}' tam.json |
  while read -r body; do
    curl -s https://api.innerfetch.com/api/v1/company/batch \
      -H "Content-Type: application/json" \
      -H "X-API-Key: $INNERFETCH_API_KEY" \
      -d "$body"
  done |
  jq -c '.results[] | select(.status == "found") | .data
    | {domain, name, industry, country: .headquarters.country, employees: .employee_count.max}' >profiles.jsonl

A test run

We ran these steps for the help desk market on 26 October 2026. The four phrases found 116 different companies. The competitors of the top five added more, for 153 companies in the CSV. Some industry labels were wrong for this market, which is why step 5 asks you to read the list. Your numbers will change as we add companies every day.

Next steps

What it costs

See full pricing

APIs this guide uses

Company search API

Write the market you want in plain words. Get the companies that match, ranked by meaning, not by keywords.

Competitors API

Get the companies a business competes with, and the reason each one is on the list.

Company enrichment API

Send a domain. Get the company profile your CRM, agent or sales team needs, in one JSON answer.

Build a target account list, answered

Does the search find every company in a market?

No. It finds the companies we know, and only strong matches. The list grows as we add companies every day, so run the same search again next month.

Can I filter the search by country or headcount?

Not in the search call. Add a profile to each company with the batch call, then filter on the fields that are filled. Headcount is not known for every company.

How do I write a good search phrase?

Say what the companies do or sell, in the words a buyer uses, such as "shared inbox for support e-mail". One job in each phrase. Avoid words like "best" or "leading".

What is a similar row in the competitor list?

A company in the same market, often with another product. It is not a confirmed competitor, but it is often a good account for the same list.

Run it on your own market

Start with 200 free credits. Sign up with a work e-mail.