Skip to Content
CoursesAutomated Outbound01 Build a clean list

Build a Clean Outbound List

Outcome: a table of target accounts with duplicates removed and obvious non-fits filtered out, ready for enrichment — and small enough that enriching it is affordable.

Surface
Sync GTM app
Level
Intermediate
Uses
Import Action, filters, one classification column
Credits
~15 per 100 companies sourced
Prerequisite
SyncGTM 101

What you will build

A single table that starts from a written definition of who you sell to and ends with a filtered, deduped account list. No contact data yet — that is lesson 05, and it is the expensive part. Everything in this lesson exists to make sure you only pay for it once, on rows that deserve it.


Why the list is where campaigns fail

A bad list cannot be rescued downstream. Perfect copy sent to the wrong company is still the wrong company, and verification does not help if the person never had a reason to reply.

Three failures account for most of it:

  • Bought lists. Everyone selling into your segment has the same file. The contacts have heard your pitch, in your words, four times this quarter.
  • Duplicates. The same account sourced twice under two domains gets two campaigns and one annoyed prospect.
  • No disqualification. Rows that were never going to buy consume the same enrichment credits as rows that were.

This lesson addresses all three before anything costs real money.


Steps

Write the definition first

Before opening the app, write down what you are sourcing, in criteria a filter could evaluate:

Industry: B2B software Headcount: 25–250 Geography: US, UK, Australia Signal: has a sales team of 5+ Disqualifier: agencies, staffing firms, anyone reselling our category

The disqualifier line is the one people skip and the one that saves the most. If you cannot name what should be excluded, you will discover it after enriching four hundred rows.

Source the accounts

Use an Import Action with your criteria as filters. Start narrow — one industry, one geography, headcount band — and check what comes back before widening.

Sourcing is cheap relative to everything that follows, but sourcing wide means paying to filter rows you should never have imported.

Dedupe on domain, not name

Company names are inconsistent — legal entity, trading name, with and without “Inc”. Domains are not. Dedupe on the domain column.

Watch for the two cases domain matching still misses: companies with separate regional domains, and recent acquisitions still operating under both. A quick sort by company name catches most of them by eye.

Apply the cheap filters

Filter on what you already have from the import — headcount, geography, industry. Every row removed here is a row you never pay to enrich.

Do this before adding any Action column. Filters cost nothing; columns cost credits.

Disqualify with one classification column

The disqualifier from step 1 usually is not a filter — “is this an agency” needs the company description read. That is one AI classification column returning a fixed value:

Read the company description. Return exactly one word: AGENCY, RESELLER, or DIRECT. Return DIRECT if unclear.

Run it, then filter to DIRECT. Fixed output values are what make this checkable — you can spot a broken column immediately, because it starts returning sentences.

Read twenty rows

Sort randomly and read twenty. Not the first twenty — the first rows of any import are the best-known companies and always look right.

You are checking one thing: would you be comfortable if a colleague saw this account in your campaign? If more than two of twenty fail, the definition in step 1 is wrong. Fix it there, not with more columns.


Check your work

CheckHow
No duplicate domainsSort by domain, scan for repeats
Filters actually appliedRow count dropped between steps 4 and 5
Classification is behavingEvery value is one of the three allowed words
List is credibleTwenty random rows, read by you

Note the row count before enrichment. Lesson 05 multiplies it by a per-row cost, and that number is your campaign budget.


Where this breaks

The costly mistake here is sourcing wide “to see what’s out there” and planning to filter later. Import volume is the number every downstream cost multiplies against, and a 5,000-row import that should have been 500 does not cost ten times more — it costs ten times more at every subsequent stage. Source narrow, verify the shape, then widen deliberately.

If your classification column returns something outside the allowed values, the prompt is the problem, not the model. Constrain harder: state the exact words, state the fallback, and give it nothing else to do in the same instruction.


Further automation

  • Save the finished configuration as a Template so the next segment starts from a working list rather than an empty table
  • Add a second classification column for tier or segment now — it costs the same to run alongside the first, and lesson 09 uses it to gate the expensive columns
  • Sourcing on a trigger instead of on demand is Signals & ABM

Next lesson

02 — Directory and exhibitor lists → decision makers, which sources from a specific published list rather than a filter, and handles the messier data that comes with it.

Reference for this lesson: Import Actions, Table, Actions.