BusinessesForSale Scraper with Financials & Description
Pricing
from $0.70 / 1,000 business listings
BusinessesForSale Scraper with Financials & Description
Collect structured business-for-sale and franchise listing records from BusinessesForSale.com using direct URLs, search terms, locations, categories, price bounds, and enrichment settings. Results are saved as business-acquisition records for review, export, BI, ETL, and agent workflows.
Pricing
from $0.70 / 1,000 business listings
Rating
0.0
(0)
Developer
Fatih Tahta
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
BusinessesForSale.com Scraper
Slug: fatihtahta/businessesforsale-scraper
Overview
BusinessesForSale.com Scraper collects structured business-for-sale and franchise listing records, including listing identity, public source context, location, asking price, revenue and cash-flow text, business category, listing labels, deal attributes, contact links, franchise flags, media, and source-provided financial fields. BusinessesForSale.com is a public marketplace for business acquisition, franchise, and investment opportunities, making its listings useful for sourcing, market research, valuation review, and monitoring workflows. The actor helps teams turn direct marketplace URLs or scoped discovery searches into repeatable datasets that can be reviewed, exported, compared, and loaded into downstream systems. It is designed for automation and operational consistency, so the same input configuration can be reused for validation runs, scheduled refreshes, enrichment backfills, and reporting pipelines. Results are delivered as structured Apify dataset records suitable for human review, spreadsheet exports, analytics tools, AI agents, and ETL processing. Use it when you need dependable recurring acquisition of public listing information without relying on manual marketplace review.
Who Should Use This Actor
- Market research and analytics teams: build structured extraction workflows for acquisition supply, category mix, pricing bands, and geographic coverage.
- Business development and M&A operators: create repeatable sourcing lists for target industries, regions, deal sizes, and listing attributes.
- Product, marketplace, catalog, or content teams: normalize public business opportunity records for internal directories, review queues, or content operations.
- Developers and data engineering teams: feed predictable JSON records into warehouses, enrichment pipelines, search indexes, and downstream systems.
- AI agents and workflow automations: collect scoped business listings as a controlled data acquisition step before summarization, routing, or human review.
- Sales, lead generation, and enrichment teams: identify public business, franchise, broker, and contact signals that can support prospecting or CRM enrichment.
- Monitoring, compliance, and operations teams: run recurring collection for known URL scopes and compare changes across saved datasets.
Common Use Cases
- Market intelligence: monitor public business listings by geography, category, price, cash flow, revenue visibility, and listing attributes.
- Lead generation: build targeted prospect lists from public acquisition, franchise, broker, seller, and contact signals when available.
- Competitive monitoring: track how business opportunity supply changes across locations, sectors, listing labels, and deal styles.
- Catalog and directory building: populate internal databases with structured public business listing records and normalized field groups.
- Data enrichment: add current public marketplace attributes to CRM, BI, diligence, sourcing, or analyst-review datasets.
- Recurring reporting: schedule periodic runs for dashboards, trend analysis, change detection, and operating reports.
- Agentic research workflows: let an internal agent collect a scoped dataset, summarize records, detect changes, and route items to the next workflow step.
Real-World Questions This Data Can Answer
- Which public business listings match a specific geography, category, keyword, premises type, management model, or deal attribute?
- Which opportunities fall inside a target asking-price, cash-flow, or revenue range?
- Which records have disclosed financial signals that are strong enough for analyst review, outreach, or modeling?
- Which listings are new, price-reduced, franchise-related, relocatable, work-from-home, or otherwise tagged for a specific buyer strategy?
- Which records appear, disappear, or change when compared with a previous run or internal sourcing list?
- Which locations or sectors have enough public listing volume to justify deeper market research?
- Which fields are reliable enough to drive dashboards, alerts, enrichment jobs, or manual review queues?
Quick Start
- Choose either direct BusinessesForSale URLs in
startUrlsor build a discovery search withkeyword,location,category, and supported filters. - Set a small
limit, such as 25 or 50, for the first validation run. - Run the actor in Apify Console.
- Inspect the first dataset records to confirm the field groups, identifiers, and optional financial fields match your use case.
- Increase the limit, add filters, export the dataset, or schedule the actor once the output is verified.
Input Parameters
Configure direct URLs or discovery criteria, then refine market scope, financial filters, enrichment depth, and output volume.
| Parameter | Type | Description | Default |
|---|---|---|---|
startUrls | array of strings | Direct BusinessesForSale search, category, location, franchise, or individual listing URLs. Use this when the source scope is already known or must be monitored repeatedly. | Form prefill: https://www.businessesforsale.com/search/businesses-for-sale |
keyword | string | Business type, industry, franchise brand, buyer theme, or acquisition thesis, such as coffee shop, dry cleaner, SaaS, or franchise resale. | - |
location | string | Country, region, state, county, or city supported by BusinessesForSale. Use it to focus discovery on a target market. | - |
category | array of strings | BusinessesForSale sector IDs selected from the Apify input dropdown. The dropdown contains labeled category options, such as services, retail, agriculture, food, professional services, franchises, and All Sectors. | - |
premises_type | array of strings | Premises filters. Allowed values: real_property, lease, relocatable. Use them when property or relocation context matters. | - |
business_type | array of strings | Listing attribute filters. Allowed values: work_from_home, accommodation_included, franchise, business_opportunity, price_reduced, mid_market, distressed, low_cost, owner_financed, hidden_gem, quick_sale. | - |
management_type | array of strings | Management model filters. Allowed values: owner_managed, employee_owned, absentee_ownership. | - |
publication_date | string | Listing freshness filter. Allowed values: last_3_days, last_14_days, last_month, last_3_months. Leave empty to avoid date-window filtering. | - |
min_price | integer | Minimum displayed asking price as a whole-number monetary amount. Leave empty to include lower-priced opportunities. | - |
max_price | integer | Maximum displayed asking price as a whole-number monetary amount. Leave empty to include higher-priced opportunities. | - |
only_disclosed_price | boolean | Require listings with disclosed asking price information. Price range filters also imply a disclosed-price requirement. | false |
min_cashflow | integer | Minimum displayed cash flow as a whole-number monetary amount. Leave empty to include lower-cash-flow opportunities. | - |
max_cashflow | integer | Maximum displayed cash flow as a whole-number monetary amount. Leave empty to include higher-cash-flow opportunities. | - |
only_disclosed_cashflow | boolean | Require listings with disclosed cash-flow information. Cash-flow range filters also imply a disclosed-cash-flow requirement. | false |
min_revenue | integer | Minimum displayed revenue as a whole-number monetary amount. Leave empty to include lower-revenue opportunities. | - |
max_revenue | integer | Maximum displayed revenue as a whole-number monetary amount. Leave empty to include higher-revenue opportunities. | - |
enrich_data | boolean | Collect richer listing details when available, such as fuller descriptions, broker or seller references, operations, property information, support notes, financing notes, and other detail fields. Disable it for lighter validation runs. | true |
limit | integer | Maximum number of business listing records to save for each source URL or discovery search. Use small limits for validation and larger limits for scheduled exports or ETL handoff. | Form prefill: 100 |
Choosing Inputs
Use startUrls when you already have a saved marketplace search, category page, location page, franchise page, or specific listing URL that should be collected consistently. Use keyword with optional location, category, and filters when you want the actor to discover matching public listings from a business theme or acquisition thesis. Narrow filters produce more targeted datasets for analyst review, CRM enrichment, and monitoring; broader filters improve discovery when the market is still being mapped. Location, category, listing freshness, premises type, business type, management model, price, cash flow, and revenue fields all reduce or segment the collection scope. For cleaner downstream comparison, run separate inputs for each geography, category, financial band, or operating workflow instead of combining unrelated segments in one run. Start with a small limit, confirm the output shape, then increase volume for recurring exports.
Input Recipes
- Validation run: use one direct search URL or one keyword, keep filters light, and set a low
limitso the first dataset is easy to inspect. - Targeted acquisition list: combine
keyword,location,category,min_price,max_price, and disclosed financial filters to focus on a specific buyer mandate. - Fresh listing monitor: use
publication_datewith a recurring schedule to review newly visible opportunities in a chosen geography or sector. - Financial screening workflow: use
min_cashflow,max_cashflow,min_revenue,max_revenue,only_disclosed_price, andonly_disclosed_cashflowto prioritize records that can support modeling. - Known URL refresh: place saved search, category, franchise, or listing URLs in
startUrlsand rerun the same configuration for repeatable monitoring. - Segmented analysis: create separate runs for each region, category, price band, or listing attribute so dashboards and change detection stay easier to interpret.
Example Inputs
Example: Direct URL validation run
{"startUrls": ["https://www.businessesforsale.com/search/businesses-for-sale"],"enrich_data": false,"limit": 25}
Example: Keyword and location discovery
{"keyword": "coffee shop","location": "Florida","category": ["1299301"],"only_disclosed_price": true,"enrich_data": true,"limit": 50}
Example: Recent financial screening run
{"keyword": "franchise resale","location": "United States","business_type": ["franchise","price_reduced"],"publication_date": "last_14_days","min_cashflow": 50000,"only_disclosed_cashflow": true,"limit": 75}
Output
Output destination
The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, AI agents, and downstream APIs with minimal post-processing.
The provided output contract contains one record shape: a business_listing record for public business-for-sale or franchise listing information.
Record envelope and stable identifiers
Each record uses a grouped envelope with record_type, record_id, source_context, and business-specific objects such as entity, location, pricing, financials, business, listing, deal, contact_details, franchise, media, and attributes. The recommended idempotency key is record_id; when a downstream system needs a fallback, use a composite of source_context.source_url and listing.listing_id when both are present. Use the recommended key for deduplication and upserts so repeated runs can merge, compare, and sync records consistently. Stable identifiers make records easier to load into warehouses, CRMs, search indexes, vector stores, monitoring systems, and review queues across recurring runs.
Examples
Example: business listing record
{"record_type": "business_listing","record_id": "businessesforsale_business_scraper:3965252","source_context": {"source_id": "businessesforsale_business_scraper","source_url": "https://australia.businessesforsale.com/australian/australian-credit-licence.aspx","position": 1,"source_position": 1},"entity": {"title": "Australian Credit Licence","description": "Great opportunity to obtain an established Australian Credit Licence, established in 2014, based in QLD. Along with the licence, the company name and corporate listing are available. The licence is..."},"location": {"display": "Queensland, Australia","region": "Queensland","country": "Australia"},"pricing": {"asking_price_text": "$85,000 (AUD)","asking_price": 85000.0,"currency": "USD"},"financials": {"revenue_text": "Undisclosed","cash_flow_text": "Undisclosed","currency": "USD"},"business": {"category": "Work From Home","tags": ["Relocatable","Work From Home","Quick Sale"]},"listing": {"listing_id": "3965252","labels": ["New","Business"],"is_franchise": false,"is_price_reduced": false},"deal": {"tenure": "Relocatable"},"contact_details": {"contact_url": "https://australia.businessesforsale.com/australian/australian-credit-licence/contact"},"franchise": {"is_franchise": false},"media": {"primary_image_url": "https://www.businessesforsale.com/content/shared/images/categoryimages/services.png","images": [{"url": "https://www.businessesforsale.com/content/shared/images/categoryimages/services.png","alt": "australian credit licence"}]},"attributes": {"financials_raw": {"Asking Price": "$85,000 (AUD)","Revenue": "Undisclosed","Cash Flow": "Undisclosed"}}}
Field Reference
Record envelope
- record_type (string, required): Record family. The provided example uses
business_listing. - record_id (string, optional): Stable record identifier when available. Recommended for upserts and deduplication.
Source context
- source_context.source_id (string, optional): Source label for the record.
- source_context.source_url (string, optional): Public listing URL used for traceability.
- source_context.position (number, optional): Position of the record within the returned result set.
- source_context.source_position (number, optional): Source-provided result position when available.
Entity
- entity.title (string, optional): Listing title.
- entity.description (string, optional): Public listing description or summary text.
Location
- location.display (string, optional): Human-readable location label.
- location.region (string, optional): Region, state, province, or comparable area.
- location.country (string, optional): Country associated with the listing.
Pricing
- pricing.asking_price_text (string, optional): Displayed asking price text.
- pricing.asking_price (number, optional): Numeric asking price when available.
- pricing.currency (string, optional): Currency code associated with pricing fields when provided.
Financials
- financials.revenue_text (string, optional): Displayed revenue value or visibility text.
- financials.cash_flow_text (string, optional): Displayed cash-flow value or visibility text.
- financials.currency (string, optional): Currency code associated with financial fields when provided.
Business
- business.category (string, optional): Public business category or sector label.
- business.tags (array of strings, optional): Listing tags, attributes, or marketplace labels such as relocatable or work-from-home signals.
Listing
- listing.listing_id (string, optional): Listing identifier from the public listing record.
- listing.labels (array of strings, optional): Public labels attached to the listing.
- listing.is_franchise (boolean, optional): Whether the listing is marked as franchise-related.
- listing.is_price_reduced (boolean, optional): Whether the listing is marked as price-reduced.
Deal
- deal.tenure (string, optional): Deal or premises context, such as relocatable.
Contact details
- contact_details.contact_url (string, optional): Public contact URL associated with the listing when available.
Franchise
- franchise.is_franchise (boolean, optional): Franchise flag in the franchise-specific field group.
Media
- media.primary_image_url (string, optional): Primary image URL when available.
- media.images (array of objects, optional): Image objects associated with the listing.
- media.images[].url (string, optional): Image URL.
- media.images[].alt (string, optional): Image alt text or description.
Attributes
- attributes.financials_raw (object, optional): Source-provided financial display values preserved for audit and review.
- attributes.financials_raw.Asking Price (string, optional): Raw asking-price display text.
- attributes.financials_raw.Revenue (string, optional): Raw revenue display text.
- attributes.financials_raw.Cash Flow (string, optional): Raw cash-flow display text.
Data Model Notes
- Identity fields: use
record_idas the primary key for matching, deduplication, and upserts when it is present. - Source/provenance fields: use
source_context.source_url,source_context.position, andsource_context.source_positionto trace records back to their public marketplace context. - Business attributes:
entity,location,pricing,financials,business,listing,deal, andfranchisecarry the main review and analysis fields. - Nested objects: related fields are grouped together so JSON-first systems can preserve structure and CSV exports can be flattened deliberately.
- Optional fields: null-check fields whose availability depends on listing type, region, public visibility, or selected input scope.
- Repeated runs: compare records across runs with
record_idplus Apify run metadata, input configuration, and export timestamp stored in your downstream system.
Data Quality, Guarantees, And Handling
- Structured records: results are normalized into predictable JSON objects for downstream use.
- Best-effort extraction: fields may vary by region, availability, account visibility, UI experiments, or source-side changes.
- Optional fields: downstream code, dashboards, and alerts should treat optional fields as nullable.
- Deduplication: use
record_idwhen available, withsource_context.source_urlandlisting.listing_idas practical fallback signals. - Freshness: results reflect the publicly available data at run time.
- Repeated runs: use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, vector stores, or monitoring systems.
- Schema awareness: downstream systems should rely on documented fields and handle newly missing optional fields gracefully.
Tips For Best Results
- Start with a small
limitto validate the output shape before scaling up. - Use one geography, category, keyword, or financial segment per run when you need clean comparison.
- Leave optional filters empty when the goal is broad discovery.
- Add filters gradually to understand how each field changes coverage.
- Use direct URLs for repeatable monitoring of known marketplace scopes.
- Schedule recurring runs for monitoring workflows instead of relying only on manual one-off jobs.
- Use stable identifiers for deduplication when storing results over time.
- Review a small sample after changing filters, enabling richer details, or increasing limits.
How to Run on Apify
- Open the actor in Apify Console.
- Configure the available input fields for the target URL scope, keyword, location, category, financial range, or listing attributes.
- Set the maximum number of outputs with
limit. - Click Start and wait for the run to finish.
- Open the dataset and inspect the first records.
- Download results in JSON, CSV, Excel, or another supported format.
Agentic And API-First Usage
BusinessesForSale.com Scraper can be used as a structured data acquisition step inside larger automated workflows for acquisition sourcing, market monitoring, enrichment, reporting, and review routing. Developers, workflow builders, and AI-agent systems can generate scoped inputs, run the actor through Apify platform automation, and consume the resulting JSON records with predictable field groups.
Agent workflow pattern:
- Generate or select a scoped input from the supported schema.
- Run the actor manually, on a schedule, or through Apify platform automation.
- Wait for completion and read the dataset records.
- Validate records against the field reference.
- Upsert records into the downstream system using
record_id. - Trigger analysis, enrichment, alerts, or human review.
Practical notes for agentic use:
- Keep prompts and automations grounded in the documented input parameters.
- Start with small validation runs before allowing broad automated collection.
- Feed the Field Reference and a small output sample to downstream AI steps.
- Treat optional fields as nullable instead of asking agents to infer missing values.
- Store run ID, input configuration, and dataset export metadata outside the record when building audit trails.
Scheduling & Automation
Scheduling
Automated Data Collection
You can schedule runs to keep business-listing datasets current for monitoring, sourcing, enrichment, and reporting workflows. Use the same validated input configuration for recurring collection so changes can be compared cleanly over time.
- Navigate to Schedules in Apify Console.
- Create a new schedule, such as daily, weekly, or custom cron.
- Configure input parameters.
- Enable notifications for run completion.
- Add webhooks for automated processing.
Integration Options
- CRM enrichment: sync public listing, location, price, financial, contact, and franchise signals into account or lead records.
- BI dashboards: monitor listing volume, pricing bands, financial visibility, category movement, and geographic coverage over time.
- Google Sheets or Airtable: review targeted sourcing lists, analyst notes, and lightweight operating reports.
- Webhooks: trigger ingestion, validation, alerts, or human-review workflows after each completed run.
- Data warehouses: store historical runs for market intelligence, change detection, and recurring reporting.
- Search or vector indexes: make business listings discoverable for internal research tools, semantic search, and AI-agent context.
- Zapier or Make: route new or changed records into no-code workflows for notifications, review tasks, or CRM updates.
Export Formats And Downstream Use
- JSON: for APIs, applications, AI agents, and data pipelines that preserve nested objects.
- CSV or Excel: for spreadsheet workflows, stakeholder review, and lightweight analysis.
- API access: for automated ingestion into internal systems.
- BI and warehouses: for reporting, dashboards, historical analysis, and monitoring.
- Search or vector indexes: for discovery, semantic search, retrieval workflows, and agent context.
Downstream Pipeline Guide
- Idempotency: use
record_idfor upserts; usesource_context.source_urlandlisting.listing_idas fallback matching signals when needed. - Null handling: treat optional fields as nullable, especially financial, contact, franchise, media, and location attributes.
- Type handling: preserve numbers, booleans, arrays, and nested objects when exporting to JSON-first systems.
- Flattening: if exporting to CSV or Excel, flatten nested objects deliberately and keep the original JSON export for full fidelity.
- Partitioning: store run date, input segment, geography, category, financial band, or workflow name outside or alongside records for easier analysis.
- Change detection: compare repeated runs by
record_idand selected fields such aspricing.asking_price_text,financials.revenue_text,financials.cash_flow_text,listing.labels, andlisting.is_price_reduced. - Quality checks: monitor record count, duplicate rate, required identifier availability, and important optional field fill rates.
- Human review: route records with missing critical fields, unusual financial values, changed labels, or changed price signals into a review queue.
- Retention: decide how long to keep raw exports versus normalized warehouse tables based on your use case.
Performance
Estimated run times:
- Small runs (< 1,000 outputs): ~3-5 minutes.
- Medium runs (1,000-5,000 outputs): ~5-15 minutes.
- Large runs (5,000+ outputs): ~15-30 minutes.
Execution time varies based on filters, result volume, target availability, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.
Limitations
- Availability depends on what BusinessesForSale.com publicly exposes at run time.
- Some optional fields may be missing on sparse records or listings with limited public details.
- Very broad searches may take longer or require higher limits to collect enough records.
- Target-side changes can affect field availability, labels, or naming.
- Regional, account, visibility, or availability differences may change visible results.
- The actor provides structured public data, not business advice, legal advice, valuation advice, or guaranteed market completeness.
Troubleshooting
- No results returned: check filters, location or category spelling, direct URLs, and whether the target has matching public records.
- Fewer results than expected: broaden filters, raise
limit, or verify that the target contains enough matching public listings. - Some fields are empty: optional fields depend on what each public record provides.
- Duplicate-looking records: compare
record_id,source_context.source_url, andlisting.listing_idto decide whether records represent variants, locations, dates, or updates. - Run takes longer than expected: reduce scope, lower
limitfor validation, or split broad collection into smaller segments. - Output changed: compare the current output with the field reference and report a small sample if support is needed.
- Downstream import failed: check JSON validity, nullable fields, nested objects, and whether your destination expects flattened columns.
FAQ
What data does this actor collect?
It collects public business-for-sale and franchise listing records from BusinessesForSale.com, including listing identity, source context, location, pricing, financial display fields, business category, tags, listing labels, deal attributes, contact links, franchise flags, media, and raw financial display values when available.
Can I filter by location, category, date, price, status, keyword, or other criteria?
You can use direct URLs, keyword, location, category, premises_type, business_type, management_type, publication_date, asking-price filters, cash-flow filters, revenue filters, and disclosed-price or disclosed-cash-flow requirements. The schema does not expose a separate status filter.
Why did I receive fewer results than my limit?
The selected URL, keyword, location, category, filters, or date window may have fewer matching public records than the requested limit. Optional source availability can also affect how many records are returned for a particular scope.
How should I choose a limit for my first run?
Start with a small limit, such as 25 or 50, inspect the dataset shape, and then increase the limit once the fields and filters match your workflow.
Can I schedule recurring runs?
Yes. Use Apify schedules with a validated input configuration to refresh known URLs, discovery searches, sectors, or geographic segments over time.
How do I avoid duplicates across runs?
Use record_id as the primary upsert key when it is present. For additional checks, compare source_context.source_url and listing.listing_id.
What is the best field to use as a unique key?
record_id is the recommended idempotency key. It is designed to be more convenient for merging and deduplicating records than display text or position fields.
Can I use the output with AI agents or automated workflows?
Yes. The grouped JSON structure is suitable for agent review, summarization, enrichment routing, alerts, retrieval systems, and downstream APIs. Agents should treat optional fields as nullable.
Can I export the data to CSV, Excel, or JSON?
Yes. Apify datasets support common export formats including JSON, CSV, Excel, and API access. JSON preserves the full nested structure most accurately.
Does this actor collect private data?
The actor is intended for publicly available BusinessesForSale.com listing information. Users are responsible for using the results lawfully and respecting privacy, site terms, and applicable data protection rules.
What should I include when reporting an issue?
Include the input used, the run ID, expected versus actual behavior, a small output sample if helpful, and the downstream destination or export format if the issue is pipeline-related.
Compliance & Ethics
Responsible Data Collection
This actor collects publicly available business-for-sale and franchise listing information from https://www.businessesforsale.com for legitimate business purposes, including:
- Business acquisition research and market analysis.
- Sourcing, enrichment, and operational reporting.
- Monitoring public listing changes for internal review workflows.
This section is informational and not legal advice. Users are responsible for confirming that their collection, storage, and use of the data complies with applicable laws, regulations, contracts, and policies.
Best Practices
- Use collected data in accordance with applicable laws, regulations, and the target site's terms.
- Respect individual privacy and personal information.
- Use data responsibly and avoid disruptive or excessive collection.
- Do not use this actor for spamming, harassment, discrimination, or other harmful purposes.
- Follow relevant data protection requirements where applicable, such as GDPR, CCPA, or sector-specific rules.
- Review your own retention, access control, and data-sharing policies before operationalizing the dataset.
Support
For help, use the actor page or the Issues section. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, a small output sample when useful, and the downstream destination or export format if the issue is related to a pipeline or export.