Score your CRM company data and fill the gaps in batches

See exactly which company fields are missing across your CRM, then fill them in batches you approve field by field before anything gets saved.

App
CompanyEnrichHubSpotGoogle SheetsSalesOperationsLead EnrichmentData Sync
PromptCreate

Build me an enrichment coverage workbench for our HubSpot company database, so our ops team can see on one screen how complete our company data actually is and then fix the gaps in controlled batches. It is an app we open and work in, not something that runs on a schedule.

The landing view is a coverage dashboard. Load companies with the HubSpot Search Companies operation, paging through results and requesting the properties we score: name, domain, industry, numberofemployees, annualrevenue, country, linkedin_company_page, plus hubspot_owner_id and lastmodifieddate. Score field coverage across the five fields we care about (industry, employee count, revenue band, country, LinkedIn URL) and show three things: an overall completeness percentage across all scored fields, a per field gap breakdown with the count and percentage of records missing each field, and a sortable table of the worst records (fewest filled fields first) with a column per scored field marked filled or blank. Resolve owner names with the HubSpot List Owners operation and let me group and filter the table by owner. Add filters for owner, industry, lifecycle stage, and missing a specific field. HubSpot search caps out at 10,000 results, so state the scanned scope plainly in the UI and let me narrow it with filters rather than implying the whole database was covered.

From the table I select rows and hit Enrich. Route the selection automatically. For records that have a usable domain, send up to 50 domains per request to the CompanyEnrich Batch Enrich Companies (Sync) operation and fold the results straight into the review queue. For larger selections use CompanyEnrich Create Bulk Enrichment Job (Async), which takes up to 10,000 domains and returns a job id immediately. Persist that job id and render a real job progress state (queued, running, completed, failed) driven by CompanyEnrich Get Bulk Enrichment Job Status on a refresh interval, never a blocking spinner that holds the whole screen hostage. When the job reports completed, fetch the results from the signed results url it returns and merge them into the same review queue. For records that have a company name but no usable domain, fall back to the CompanyEnrich Enrich Company by Properties operation one record at a time.

Nothing is written to HubSpot until I approve it. After enrichment, open a review screen with one row per company and, inside it, a side by side diff of current value versus proposed value for each scored field, with a tick box per field. Blanks only is the default: fields whose current value is empty come pre ticked, and fields that already hold a value are shown for comparison but left unticked and disabled. There is an explicit overwrite mode toggle, off by default, that unlocks the already filled fields; when it is on, make that unmistakable in the UI and record it against the run. Give me select all and clear controls per record and per field column, so I can approve a whole column of missing industries in one pass.

CompanyEnrich returns revenue and employee counts as enum range strings such as "1m-10m" and "51-200". Treat them as strings everywhere and do not parse them into numbers. Keep an editable mapping table in the app that maps each CompanyEnrich range string onto the exact value our HubSpot property expects, show the mapped value in the diff, and flag any range that has no mapping instead of guessing at one.

When I approve, apply the changes with the HubSpot Update Company operation, sending only the fields I ticked for that company, and show per record success or failure with the actual error message when one fails. Every applied change is appended to an audit log spreadsheet using the Google Sheets Append Values operation, one row per field changed: timestamp, company id, company name, domain, field name, previous value, new value, enrichment source (sync batch, async job, or properties fallback), job id where relevant, whether overwrite mode was on, and who approved it.

Surface every record CompanyEnrich could not match in its own Unmatched tab, with the reason (no usable domain, no match returned, or the name lookup came back empty), so the team can work them manually instead of watching them silently disappear. Let me mark an unmatched record as handled, and let me push the unmatched list to its own tab in the audit spreadsheet with the same append operation.

Persist run history so the team can revisit past hygiene passes: each run stores who started it, when, how many records were selected, which route was used, the job id, and counts of proposed, applied, skipped, and unmatched. Save the audit spreadsheet id, the scored field list, and the range mapping table as app settings. Default landing page is the dashboard, with tabs for Review, Unmatched, and Run history.

The people using this are ops managers running a quarterly data hygiene pass, so favour density and clarity over decoration: real counts and percentages next to every bar, sortable columns, a persistent count of how many records are selected and what the enrichment will cost in credits, and a confirm step before anything writes back to HubSpot.

What does this prompt do?

  • Scores every company in your CRM on the fields you actually care about (industry, employee count, revenue band, country, LinkedIn page) and shows one overall completeness number plus a gap breakdown for each field.
  • Ranks the worst records and groups them by owner, so each person can see the gaps on the accounts they are responsible for.
  • Fills gaps in controlled batches: pick the records, look up fresh company data, and review a side by side comparison of what you have now versus what is proposed.
  • Saves only the fields you tick, never touches a field that already has a value unless you deliberately turn overwrite on, logs every applied change to a spreadsheet, and keeps a separate list of records that could not be matched so nobody loses them.

What do I need to use this?

  • A HubSpot account with companies in it and permission to edit company records
  • A CompanyEnrich account for the company data lookups
  • A Google account and a spreadsheet to hold the audit log
  • A short list of the company fields your team treats as required

How can I customize it?

  • Change which fields count toward the completeness score, and how they are weighted in the worst records ranking
  • Set the batch size where the app switches from an instant lookup to a background job you can walk away from
  • Point the audit log at a different spreadsheet or tab, and filter the worklist by owner, industry, or lifecycle stage

FAQs

Will this overwrite data my team already entered?
No. Filling blanks only is the default, so a field that already has a value is shown for comparison but stays unticked and locked. If you genuinely want to replace existing values, there is an overwrite toggle you have to turn on yourself, and every change made that way is flagged in the audit log.
How many companies can I fix at once?
Small selections are looked up instantly and appear in the review screen right away. Larger selections are sent off as a background job that can cover thousands of records, and the app shows real progress while it runs so you can keep working or come back later.
What happens to companies that cannot be matched?
They go into their own list with the reason they failed, such as no usable website or no match found. They stay there until someone works them by hand, so they never quietly disappear from the count.
Does it work for companies that have no website on record?
Yes. If a record has a company name but no usable website, the app falls back to a name based lookup instead of skipping it.
Do I need a paid HubSpot plan?
It works on any plan where you can view and edit company records. The only thing to check is that the fields you want to score and update exist on companies in your account.
How often should we run this?
Most teams do a hygiene pass each quarter, because business data goes stale fast and single source enrichment tends to leave a large share of records incomplete. The app is built for that ritual: check the score, work the worst records, and log what changed.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Plan a field sales day around drive time and neglected accounts

Pick a date, a starting point and a radius, then build a sequenced day of customer visits that lands straight on your calendar.

Geolocation
HubSpot
Google Calendar
App
Find ICP accounts, verify the emails, file them in HubSpot

One screen where reps filter for companies that fit, see who is actually reachable at each account, and save only the addresses that verify.

Hunter
HubSpot
App
Influencer campaign roster board with AI creator briefs

Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.

HypeAuditor
Google Sheets
Notion
App
Morning repricing console for Shopify with margin-safe rules

Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.

Hyperbrowser
Shopify
Google Sheets
App
Pre-flight bounce check before you launch a cold email sequence

See the projected bounce rate for any outbound send before it goes out, and keep the launch button locked until the list is clean enough to be safe.

Hunter
Google Sheets
App

Stop guessing how complete your CRM really is.

Build your own coverage workbench and clear the gaps in batches your team approves, with every change on the record.