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 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.
curlandjqin 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
- Find who already buys from the companies on your list: see find your competitors’ customers.
- Score the list in your CRM with the company enrichment API.
- Let an AI agent build and explain the list: see company data for AI agents.
What it costs
- Search, up to 50 rows: 1 credit a call
- Competitor list: 3 credits a call
- Company profile: 2 credits a call
- 1,000 company profiles: $11.98 on the Scale plan, $29 pay as you go
- Calls that fail on our side and queued calls are free
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.