Stop paying Clay credits for prospects you already own

Preview a Clay prospect list for free, see which people are already in HubSpot and who owns them, then spend credits only on the net-new rows.

App
ClayHubSpotSalesLead EnrichmentData Sync
PromptCreate

Build me an app my go-to-market team opens every time we build a new prospect list, so we stop burning Clay credits on people we already own or never wanted. The design principle is that Clay separates cheap browsing from paid enrichment, and this app has to mirror that split exactly: a dedupe-and-select gate sits between the free preview and the credit-consuming run.

The main screen is a search builder. On load, call Clay's List Search Filter Fields for the selected source type (people or companies) and render the returned fields as the filter controls, so the form always matches what Clay actually accepts rather than a hardcoded guess. Let me toggle between people and company searches and stack several filters. When I hit Preview, start the search with Create a Filters-Mode Search, hold the returned search_id in view state, and page results into a table with Run a Filters-Mode Search, which is a stateful iterator you call again while has_more is true. Load one page at a time behind a Load more control instead of draining the whole search up front.

Dedupe every row against HubSpot as it lands. Check people with Search Contacts by email and companies with Search Companies by domain, batching lookups into as few search calls as possible instead of one request per row, because HubSpot search is limited to a few requests per second and caps how many filter groups a single search can carry. Any row with a match gets an "already in your CRM" badge showing the current record owner's name, resolved through List Owners, which you should fetch once per session and cache as an owner ID to name map. Rows with no match are flagged net-new.

Selection is where the spend decision happens, so make it the visual center of the screen. Every row has a checkbox. Rows matched in HubSpot are unchecked by default and visually de-emphasized; net-new rows are the ones I pick. Directly above the Enrich Selected button, show a running counter with how many rows are currently selected and how many were skipped as CRM duplicates, so the cost of a run is visible before anyone clicks.

Enrichment stays a deliberate act and never fires automatically. One Enrich Selected button runs my chosen Clay routine on just the checked rows using Run a Routine, which accepts up to 100 inline items per call, so chunk larger selections into multiple runs. Each call returns a routine_run_id and completes asynchronously. Poll Get Routine Run Results for each run until its status is terminal, and fill enriched columns into the existing table rows as results land rather than blocking the whole screen behind a spinner. Show per-row status so I can tell which rows are still running, which came back, and which failed.

Once enrichment returns, let me review the filled-in rows and approve them, then push only the approved ones into HubSpot. Send people through Batch Upsert Contacts matched on email in batches of up to 100, so re-pushing the same list never creates duplicates, and create accounts with Create Company. When the push finishes, report exactly how many records were created versus updated, and surface any rows HubSpot rejected so I can fix them.

For persistence, let me save the current filter configuration as a named filter set and reload it on a later visit, so recurring list builds start from the last one instead of being rebuilt from scratch. Also give me a small settings area where I paste the Clay routine ID that Enrich Selected should run, because routine and table IDs are not discoverable through Clay's public API and have to be copied out of the Clay workspace UI. Keep the Clay API key server-side, never in the browser.

What does this prompt do?

  • Build a prospect search in Clay from the real filter options for people or companies, and preview the matches in a table before spending anything
  • Check every row against your HubSpot contacts and companies, badging the ones you already have and showing which rep owns the record
  • Select only the net-new rows, with a running count of what you selected and what was skipped as a duplicate sitting right above the enrich button
  • Enrich just the rows you checked with your own Clay routine, watch results fill in as they land, then push the ones you approve into HubSpot
  • Save your filter combinations by name so the next list build starts where the last one left off

What do I need to use this?

  • A Clay workspace and an API key, which you create in Clay's account settings
  • A HubSpot account you can connect, with permission to view and create contacts and companies
  • The ID of the Clay enrichment routine you want the app to run, copied from your Clay workspace

How can I customize it?

  • Switch the builder between people searches and company searches, and choose which Clay filters appear on the form
  • Point the enrich button at a different Clay routine, or keep several saved filter sets for different segments and territories
  • Change what counts as a duplicate, for example matching companies on name as well as website, or treating a record owned by someone who has left as net-new

FAQs

Does previewing a list cost me Clay credits?
Browsing search results is the cheap step in Clay. Credits are spent when an enrichment routine runs, and in this app that only happens when you click Enrich Selected on the rows you have checked. Nothing is enriched automatically.
How does it know someone is already in our CRM?
Every row that comes back is checked against HubSpot as it loads, people by email address and companies by website domain. Anything that matches gets an "already in your CRM" badge showing the current record owner, so you can see at a glance whether a name is worth paying for.
Will this create duplicate contacts in HubSpot?
No. Contacts are matched on email address when they are pushed, so someone who already exists is updated rather than added a second time. You also choose which rows get pushed, so nothing lands in the CRM without your approval.
Can I reuse the same search next time?
Yes. Save any combination of filters as a named filter set and load it on a later visit. Most teams end up with a handful of saved searches for their core segments.
Where do I get the enrichment routine the app runs?
You copy the routine's ID out of your Clay workspace and paste it into the app's settings once. Clay does not publish a list of your routines to outside tools, so this is a one-time setup step rather than something the app can discover for you.

Related templates

Client-by-client cold email pipeline review for agencies

Pick a client and a date range to see sent, replies, meetings booked and the real deal value your cold email produced, campaign by campaign.

Instantly
HubSpot
Slack Bot
App
Partner tier review board for quarterly promotion calls

Work every partner tier decision from one board, with the revenue and commission numbers, clear promotion thresholds, and AI review briefs.

Introw
HubSpot
Slack
App
Reconcile partner commissions between HubSpot and Introw

Open one board at month end to find every closed deal missing a commission, every commission with no deal behind it, and every amount that does not add up.

Introw
HubSpot
Slack
App
Hiring signal board for your customers and open pipeline

Open one board each morning to see which of your accounts are hiring, what they are building, and where your product fits the roles they just opened.

JobsPipe
HubSpot
App
Placement pricing desk for recruiting and staffing agencies

Open a live deal, see the market pay range for that role and city, set your markup, and write the agreed numbers straight back onto the deal.

Job Salary Data
HubSpot
App
Instagram comment and DM triage inbox for your team

Work every unanswered Instagram comment, Reel reply and Direct message from one queue, with claimed rows so two people never answer the same person.

Instagram
HubSpot
Slack Bot
App

Stop paying to enrich people you already own.

Put a duplicate check and an approval step between browsing prospects and spending credits on them.