Methodology
How DealLedger collects, normalizes, and publishes listings of businesses for sale in the United States.
What we observe
DealLedger maintains a continuously updated record of business-for-sale listings published directly on business brokers' own websites. We track over 1,700 broker sites, the majority of which are not comprehensively indexed by any single marketplace. Every listing is traceable to the broker page it came from.
All listings are collected from publicly accessible web pages. We do not access private or login-gated systems, and we do not ingest marketplace aggregators. How we crawl, and how a broker can opt out, is described in our scraping policy.
What we publish
For each listing in the ledger, we publish a normalized record containing:
| Field | Description |
|---|---|
| listing_number | Stable identifier used to track the listing over time. |
| title / header | Listing headline as published by the broker. |
| state | U.S. state where the business is located, normalized to two-letter codes. |
| price | Asking price in USD where disclosed. |
| source_url | Direct link back to the original listing page on the broker's site. |
| first_seen | Date DealLedger first observed the listing. |
| last_seen | Most recent date DealLedger observed the listing. |
| estimated_listed_date | Date the listing went live, as observed — or a floor if it was already up when we first crawled the broker (see "Date recovery" below). |
| days_on_market | Days elapsed since estimated_listed_date. |
| is_active | True if the listing was observed in the most recent crawl of its broker. |
Collection cadence
Broker sites are crawled on a rolling rotation, stalest first. Each site is crawled at most once a day, and each broker that is producing listings at least once a week. The large franchise networks are read daily. Every crawl is recorded — we never overwrite history. When a listing disappears from its broker's site, we record the disappearance rather than deleting the row.
Normalization
Raw listings vary widely in format. We apply a normalization pass to make records comparable across brokers:
- State names mapped to standard two-letter codes.
- Prices parsed from strings ("$1.2M", "1,200,000", etc.) into integers.
- Categories mapped to a controlled vocabulary where possible.
Date recovery
Almost nobody publishes the date a listing went up. We record it ourselves.
Observed dates. For a listing on a broker's own site, the date is simply the first day we saw it. That is an observation, not an estimate. Where a listing was already up the first time we crawled that broker, we can only say the listing is at least that old, and we show it as a floor — 176+ days rather than a bare number.
Broker-direct crawling began in March 2026, so observed history starts there. The longer a broker has been in the index, the more of its listings carry a true observed date rather than a floor.
Relisting
When a listing disappears from a broker's site we record the date it was last seen; it is never deleted. A business that comes back to market later — often at a different price, after failing to sell the first time — is one of the most useful signals in the record. Automated relist matching across broker-direct listings is in development; until it ships, disappearances and reappearances are visible in the raw history but are not flagged.
Data quality
Rows are gated before they enter the index:
- Junk filter — navigation fragments, status badges, price fragments, error pages and other page furniture are rejected, never published as listings.
- Residential filter — MLS numbers, bed and bath counts and street-address titles indicate residential property, not businesses, and are excluded.
- Financial sanity — a value repeated across asking price, cash flow and revenue survives only as the asking price; cash flow at or above revenue is dropped. A missing number is honest; a wrong one is not.
What we do not do
- We do not rank brokers or listings.
- We do not recommend businesses to buyers.
- We do not capture leads on behalf of brokers.
- We do not broker transactions ourselves.
- We do not edit history. Errors are corrected by appending a new record, not by overwriting.
Data access
Active listings are queryable in real time through the ledger interface on the home page.
All published data is released under a CC0 (public domain) dedication. You may use, redistribute, or build on it without attribution, though attribution is appreciated.
Corrections
If you spot an error in a listing — wrong state, wrong price, wrong status — email info@dealledger.org with the listing identifier and what's wrong. We review corrections weekly and append the corrected record without deleting the original.
Limitations
DealLedger is a best-effort observational record, not an authoritative registry. Specifically:
- Coverage is incomplete. Brokers not yet in our source list, off-market deals, and listings on social media or in private networks are not captured.
- Observed history starts in March 2026. A listing shown as a floor ("176+ days") may well be older; it cannot be newer.
- A listing is only as fresh as the last crawl of its broker. Each producing broker is crawled at least weekly.
- Brokers can repost or refresh listings in ways that affect apparent listing age. We detect some of these, not all.
- Listing content (price, headline, category) reflects what the source publishes. If a broker publishes inflated or stale information, we record what we observe.
Last updated: September 2026. Questions: info@dealledger.org.