Business-for-Sale Deal Screener & Valuation Tool avatar

Business-for-Sale Deal Screener & Valuation Tool

Pricing

from $10.00 / 1,000 scored listings

Go to Apify Store
Business-for-Sale Deal Screener & Valuation Tool

Business-for-Sale Deal Screener & Valuation Tool

Turn BizBuySell, BizQuest, BusinessesForSale, and other business-for-sale datasets into ranked acquisition opportunities using valuation, DSCR, cash-on-cash return, buy-box scoring, deduplication, and price-change tracking.

Pricing

from $10.00 / 1,000 scored listings

Rating

0.0

(0)

Developer

Daniel Craig

Daniel Craig

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Business-for-Sale Deal Screener & Valuation Analyzer

Turn mixed business-for-sale listing exports into a ranked acquisition shortlist—without scraping, contacting sellers, or sending deal data to an AI service.

The Actor accepts raw records through an items array or Apify datasetId, recognizes common marketplace fields, calculates acquisition and financing metrics, scores each unique listing from 0–100, and explains every pass or rejection. Add previousDatasetId to spot new listings, price changes, removals, and conservative relists.

What you get

  • Normalized asking price, revenue, cash flow, SDE, profit, industry, location, ID, title, URL, source, and currency.
  • Price-to-SDE, price-to-revenue, cash-flow yield, estimated annual debt service, DSCR, equity investment, and cash-on-cash return.
  • Configurable buy-box thresholds, scoring weights, financing assumptions, and scoring benchmarks.
  • Deterministic score, A–F grade, pass/fail, strengths, rejection reasons, and data-quality warnings.
  • Deduplication by source/listing ID, normalized URL, then conservative normalized title + location.
  • Optional comparison statuses: new, unchanged, price-drop, price-increase, removed, and relisted.
  • Original input preserved verbatim under original, with aliasMatches showing which source field supplied each normalized value.
  • A separate SUMMARY record with totals, grades, pass/fail counts, rejection reasons, duplicates, warnings, sources, and changes.

What this Actor does not do

It does not visit listing sites, bypass access controls, use a proxy, contact a seller, call an external AI API, or fetch exchange rates. It only processes records you supply. Currency conversion occurs only when you provide an exchange rate.

Quick start

Paste records directly:

{
"items": [
{
"source": "BizBuySell",
"listingNumber": "BBS-101",
"title": "Commercial Cleaning Company",
"category": "Cleaning",
"location": "Chicago, Illinois",
"askingPrice": "$650,000",
"grossRevenue": "$1,250,000",
"cashFlow": "$240,000",
"sde": "$225,000",
"url": "https://www.bizbuysell.com/example-listing"
}
],
"financing": {
"downPaymentPercent": 20,
"annualInterestRatePercent": 10,
"loanTermYears": 10
},
"buyBox": {
"minScore": 70,
"maxAskingPrice": 750000,
"minRevenue": 500000,
"minSde": 150000,
"maxPriceToSde": 3.5,
"minDscr": 1.25
}
}

Or analyze an existing Apify dataset:

{
"datasetId": "YOUR_CURRENT_DATASET_ID",
"previousDatasetId": "YOUR_PREVIOUS_DATASET_ID",
"buyBox": {
"minScore": 75,
"maxAskingPrice": 1500000,
"maxPriceToSde": 3.25,
"minDscr": 1.5,
"allowedLocations": ["Illinois", "Wisconsin"],
"excludedIndustries": ["Restaurant"]
}
}

Exactly one of items and datasetId is required.

Example result

{
"source": "BizBuySell",
"listingId": "BBS-101",
"title": "Commercial Cleaning Company",
"financials": {
"currency": "USD",
"askingPrice": 650000,
"revenue": 1250000,
"cashFlow": 240000,
"sde": 225000,
"profit": null
},
"metrics": {
"priceToSde": 2.8889,
"priceToRevenue": 0.52,
"cashFlowYield": 0.3692,
"estimatedAnnualDebtService": 82462.06,
"dscr": 2.7285,
"equityInvestment": 130000,
"cashOnCashReturn": 1.0964
},
"score": 96,
"grade": "A",
"passed": true,
"change": { "status": "new" }
}

The actual result also contains reasons, warnings, score breakdown, normalized identity fields, alias matches, converted base-currency values, and the complete original record. See examples/sample-output.json in the source package.

Marketplace compatibility

The Actor is field-shape compatible rather than tied to a particular scraper. It recognizes common exports from:

SourceCommon fields recognized
BizBuySelllistingNumber, askingPrice, grossRevenue, cashFlow, sde, category, location
BizQuestlisting_id, list_price, annual_revenue, seller_cash_flow, business_category, business_location
BusinessesForSalebusinessId, price, revenue, ownerBenefit, industry, structured location
Flippalisting_id, asking_price, revenue_average, profit_average, property_type, country_name
Empire Flipperslisting_number, listing_price, monthly_revenue, monthly_net_profit, monetization, country

Monthly fields such as Flippa revenue_average / profit_average and Empire Flippers monthly_revenue / monthly_net_profit are annualized by multiplying by 12. Alias matching also works inside nested objects.

Metrics and assumptions

earningsBasis: "auto" uses SDE first, then cash flow, then profit for DSCR and cash-on-cash calculations. Set it explicitly to sde, cashFlow, or profit if your acquisition model requires one definition.

Debt service uses a standard fully amortizing monthly-payment formula. Equity investment equals down payment + closing costs + working capital. Cash-on-cash return is (selected annual earnings - annual debt service) / equity investment.

These calculations are screening estimates, not lender underwriting or a certified valuation.

Scoring

The six score components are:

ComponentDefault weight
Price / SDE25
Price / revenue10
Cash-flow yield15
DSCR20
Cash-on-cash return20
Data completeness10

Weights can be any non-negative values and are normalized to 100. Scores are deterministic: the same record and configuration produce the same score. Grades are A ≥ 85, B ≥ 70, C ≥ 55, D ≥ 40, and F below 40.

Buy-box rules determine pass/fail. If a threshold is configured and its required data is missing, the listing fails by default. Set failOnMissingThresholdData to false to leave that threshold unevaluated instead.

Currency handling

Source-currency ratios remain calculable without conversion. Price-based buy-box checks use baseCurrency and require a user-supplied rate when the source currency differs.

{
"baseCurrency": "USD",
"defaultCurrency": "EUR",
"exchangeRates": {
"USD": 1,
"EUR": 1.17,
"GBP": 1.34
}
}

Each rate means “units of base currency per one unit of source currency.” The Actor never retrieves or claims a live rate.

Comparison rules

Current and previous records are matched in this order:

  1. Same normalized source + listing ID.
  2. Same normalized URL after removing query parameters, fragments, www, and trailing slashes.
  3. Same conservative normalized title fingerprint + location.

A title/location-only match with a changed ID or URL is relisted. An unmatched previous record is emitted as recordType: "removed" when includeRemovedRecords is true. Removed records have no score and do not trigger the scored-listing event.

Warnings

Warnings identify missing asking price, revenue, earnings, title, or location; assumed or unconvertible currency; invalid URLs; negative financial values; conflicting aliases; earnings exceeding revenue; and materially inconsistent SDE/cash-flow/profit figures.

Warnings do not silently rewrite the source data. Review them before relying on the screen.

Output and integrations

  • Default dataset: scored current listings plus optional removed records.
  • Default key-value store: SUMMARY JSON.
  • Dataset views: deal screen and normalized records.
  • Strict runtime schemas: input, output record, and summary.

Outputs can be exported from Apify as JSON, CSV, Excel, XML, RSS, or JSONL and used with webhooks, schedules, Make, Zapier, n8n, or the Apify API.

Pricing

  • Actor start: $0.00005 per run.
  • Scored listing: $0.01 per unique current listing.
  • Duplicates and removed records are not scored-listing events.

To prevent double charging, the publication configuration removes the automatic apify-default-dataset-item event and uses the custom scored-listing event. A 100-listing run costs $1.00005 before any Apify Store plan discount.

Privacy and security

No third-party API keys are requested. The Actor does not scrape, browse, contact sellers, or transmit listing content to outside services. Data remains in the Apify storages associated with the run and is subject to the retention and access settings on your Apify account.

Limits

  • Up to 100,000 supplied items per run under the strict input schema.
  • Default memory: 512 MB; increase toward 1 GB for unusually large or deeply nested records.
  • Objects and arrays inside original are preserved, which increases output size for very large source records.
  • Source sites can change export field names. Unrecognized fields remain preserved and produce missing-data warnings rather than guessed values.

Disclaimer

This Actor is a preliminary screening tool. It does not verify listing claims, replace financial/legal/tax due diligence, provide investment advice, or produce a certified business valuation. Confirm all figures and financing terms with qualified professionals before making an acquisition decision.