Qualifying from Public Filings
Qualifying from Public Filings is a six-step outbound and ABM play for your CRM, from “Name the fact that actually qualifies” to “Audit, then load to the CRM”. It uses HubSpot, SEC EDGAR, Claude, Exa and Firecrawl.
- Motion
- Outbound, ABM
- Channel
- CRM
- Steps
- 6
- Tools
- 5
The workflow
Qualifying from Public Filings
The fact that decides fit, which firmographic databases do not carry. Every field allows unknown.
Target accounts, pulled into a Clay tableName, domain, country, CRM id
Public filerThe filing is the answerPin the run to one named filing.
SEC EDGAR
ClaudePublished totals first, then a build-up per format, flagged as an estimate.
Exa
Firecrawl
ClaudeEvery field returns a value, or unknown with a reason.
Arithmetic in the method forces the estimate flag on.
Each field carries its filing, fiscal year and URL.
Open a sample of rows and match each value to the page it cites. Report coverage per field.
Write to the CRMValue, source and estimate flag land together. Unknown becomes the rep's first question.
HubSpot
HubSpot
SEC EDGAR
Claude
Exa
Firecrawl
The diagram as text
- 1
Name the fact that qualifies
The qualifying question: Footprint, Owned vs leased and Who maintains it. The fact that decides fit, which firmographic databases do not carry. Every field allows unknown..
- 2
Route public and private
Target accounts, pulled into a Clay table (name, domain, country, crm id): Tool: HubSpot.
Public filer (the filing is the answer): 10-K Item 2, 20-F and Fiscal year. Pin the run to one named filing. Source: SEC EDGAR. Read: Claude. Tool: SEC EDGAR.
Private company (no filing): Published totals, Store count and Format sizes. Published totals first, then a build-up per format, flagged as an estimate. Search: Exa and Firecrawl. Read: Claude.
- 3
Record only what is disclosed
The source discloses → The record gets
- Square footage split by tenure → Owned and leased records
- Split counts, one total → One record, counts as fields
- Store count, no size → Build-up per format, estimate
- Nothing usable → Unknown, with the reason
Never apportion a total by a site-count ratio
- 4
Guard in code, not in the prompt
Gate 1: No blanks. Every field returns a value, or unknown with a reason. Rejected: Blank field, Re-run.
Gate 2: No hidden estimates. Arithmetic in the method forces the estimate flag on. Rejected: Unflagged math, Flagged as estimate.
Gate 3: Source attached. Each field carries its filing, fiscal year and URL. Rejected: No source, Held back.
- 5
Audit, then load
Check against the filing: Open a sample of rows and match each value to the page it cites. Report coverage per field..
Write to the CRM: Value, source and estimate flag land together. Unknown becomes the rep's first question. Write: HubSpot. Tool: HubSpot.
Outcome: Accounts qualified on cited facts. Tools: HubSpot.
The stack: HubSpot, SEC EDGAR, Claude, Exa and Firecrawl.
Open the diagram full size (1180 px wide)
The play in six steps
- 01
Step 1: Name the fact that actually qualifies
Data vendors sell industry and headcount. The fact that decides fit, such as footprint, tenure or who carries the maintenance, usually lives only in filings.
- Write down the question the buyer would ask on a first call, then the field that would answer it.
- Test the obvious proxy on real accounts before trusting it. Owning buildings is not the same as maintaining them: a net-lease landlord owns everything and fixes nothing.
- Give every field a closed set of answers, and make unknown one of them.
- Unknown is an acceptable answer. Blank is not.
- 02
Step 2: Route public filers and private companies
Public and private companies need different research methods, so every account is routed before anything is read.
- Pull target accounts from HubSpot into a Clay table: name, domain, country and CRM id.
- Route each one: public filer, private operator, private landlord, or not relevant to the question.
- Public filers go to the filing. Private companies go to published totals and a build-up.
- Tag out-of-scope segments instead of deleting them, so reopening one later costs nothing.
- 03
Step 3: Read the filing for public companies
For a listed company the annual filing already holds the answer, so the research starts at SEC EDGAR, not a search engine.
- Name SEC EDGAR as the first source and the latest 10-K as the document. Item 2, Properties, holds site counts, owned versus leased and total square footage.
- For foreign filers, use the 20-F or the annual report and say which one was used.
- Claude reads the section and returns structured fields, each with the filing, fiscal year and sec.gov URL behind it.
- Pin each run to one named filing. Without it, the same company returns different numbers on different runs.
- Split records only where the filing splits them.
- 04
Step 4: Research private companies without guessing
Private companies file nothing, so the method changes and every estimate has to say it is one.
- Use Exa and Firecrawl to find published totals: press releases, investor pages, landlord tenant lists.
- With no published total, build one up: store count times typical size, per format, with the working shown.
- Never apportion a total by a site-count ratio. Owned and leased sites are rarely the same size.
- A labeled estimate beats a blank. An unlabeled estimate is worse than both.
- 05
Step 5: Enforce the rules in code
A rule in the prompt loses to the model often enough to matter. A check that runs after the model does not.
- Reject any row with a blank field. Unknown must come with a reason.
- If the method text contains arithmetic, force the estimate flag on, whatever the model returned.
- Mark any ratio-based figure as apportioned and keep it out of the CRM.
- Hold back any field with no source attached.
- Cache every raw response so a parse failure can be re-read without paying for the research twice.
- 06
Step 6: Audit, then load to the CRM
Coverage and accuracy are measured before a single field reaches a rep, because a wrong cited number is worse than no number.
- Open a sample of rows and check each value against the filing it cites.
- Report coverage per field, on the in-scope accounts and on the full list separately.
- Write the fields to HubSpot with their source and estimate flag beside them.
- Every unknown becomes a qualifying question the rep asks on the first call.
Tools used
The five tools this play names. Each links to the other plays that use it.
Related plays
Public Records Signals
Government APIsFree, read-onlyDaily for declarations, weekly for filing phrase searches.
Portals with no APIReal browserThrottled, sessions recycled. Portals behind a CAPTCHA are out.
Browserbase
Firecrawl
One row per recordDate, source URL, verbatim excerptA record names a legal entity or a place, not your CRM account.
HubSpot
SalesforceCustomers, open deals and competitors come out first.

Claude reads the excerpt and gives a one-line reason.

Owner alertThis weekRecord link, excerpt and matched sites, straight to the owner.
Slack
HubSpotThe right contact, then a checked email.
AI Ark
Prospeo
Findymail
BounceBanAdds weight to the account score. Never opens a message.
HubSpotSomething the buyer can check for themselves, with the source link at hand.
Smartlead
Nooks
SEC EDGAR
Browserbase
Firecrawl
Clay
HubSpot
Salesforce
Claude
Slack
AI Ark
Prospeo
Findymail
BounceBan
Smartlead
Nooks
Public Records Signals
5 steps · Email, Call, CRM





+8 moreHubSpot Account Tiering & Scoring
Closed won and closed lost, last 12 to 24 monthsStart with the highest revenue customers. Look for patterns in industry, size and geography.
The disqualification reasons that keep coming back.
Enrichment fields
Clay formulas assign the tier
New HubSpot propertiesCompany and contact data mapped field by field, so the sync never creates duplicates.
Clay
Findymail
BounceBan
HubSpot
Tier workflowsProperty triggerCompany workflows with re-enrollment on, so the tier changes when the data does.
FallbackMissing tierAccounts without a tier are flagged, not left to slip through.
Re-enrich any account last enriched over 90 days ago, and re-check its contacts for job changes.
LinkedIn
HubSpot
Clay
Findymail
BounceBan
LinkedIn
HubSpot Account Tiering & Scoring
7 steps · CRM





Pain-Qualified Segments from Calls
Sales callsBuyer sideWhat was true for the buyer when they chose to talk.
Fathom
Closed won and lostBacktest setThe customers every segment is checked against.
HubSpot
One schema per callEvery situation is counted across calls. The buyers' exact phrases go into a language bank.
ClaudeFree counts, with the query and the date recorded.

Open the evidence. Two of five wrong means the test is wrong.
Customers in the 90 days before they bought, against a TAM sample.

Discover on one filter, score on the rest. Unknown never passes. Emails re-verified on every refresh.
Explorium
Exa
Clay
BounceBanNames the situation, says where you saw it, asks if the read is right.
Smartlead
HeyReach
Fathom
HubSpot
Claude
Explorium
Exa
Clay
BounceBan
Smartlead
HeyReach
Pain-Qualified Segments from Calls
6 steps · Email, LinkedIn





+3 more