Businesses For Sale Scraper avatar

Businesses For Sale Scraper

Pricing

from $0.15 / 1,000 sale listings

Go to Apify Store
Businesses For Sale Scraper

Businesses For Sale Scraper

Collect public BusinessesForSale listings from search, category, franchise, and individual listing URLs or keyword targets. Get titles, prices, revenue, cash flow, locations, categories, images, and public contact links in structured dataset rows.

Pricing

from $0.15 / 1,000 sale listings

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

1

Monthly active users

12 days ago

Last modified

Share

💼 Find public BusinessesForSale listings for acquisition research

For buyers, brokers, and market researchers, BusinessesForSale Scraper collects public business and franchise listings from BusinessesForSale.com. It saves structured rows with listing titles, prices, revenue, cash flow, locations, descriptions, categories, detail facts, images, and public contact URLs so you can compare acquisition targets in a dataset.

Use it with a BusinessesForSale search, category, franchise, or individual listing URL, with search keywords, or with both. You can search the global site or the United States, United Kingdom, Canada, Australia, and New Zealand sites, then review a small first run before collecting a larger market snapshot.

  • Find resale opportunities with Franchise by reviewing public listings.
  • Search Apps listings and compare their public price, location, and source details.
  • Build a Car Wash shortlist from public business-for-sale listings.
  • Review Restaurants listings with their public financial and location fields.
  • Research Coffee Shop listings with titles, prices, and source links.

📦 Listing rows with price and source facts

Each saved row is one accepted BusinessesForSale business or franchise listing. The row keeps the first eligible match when the same source listing appears through more than one submitted URL or keyword, and sourceUrl shows the source target for that saved match. Fields can be null or empty when the source does not show them.

The Actor reads public data only. It does not log in, submit buyer forms, contact sellers, value businesses, enrich listings from third-party databases, or reveal private seller data. It preserves visible financial text and parses one amount and currency only when the source gives a clear amount.

  1. Open the Input tab.
  2. Add one or more BusinessesForSale search, category, franchise, or listing URLs, or add search keywords.
  3. For keyword searches, choose the country site and any industry, location, sort, or financial filters.
  4. Keep Listing limit small for a first run, such as 25.
  5. Run the Actor, then open the dataset or export it as JSON, CSV, Excel, XML, or HTML.

If both URL and keyword lists are empty, the Actor finishes with zero dataset rows and shows a clear warning that a public URL or keyword is needed. No saved-listing event is charged because no listing row is saved. Review the warning, add a target, and run again.

Pasted URLs keep their own BusinessesForSale country, category, location, and sort. The keyword and filter fields apply only to searches generated from keywords. Use maxResults to limit accepted listings across all targets, or leave it empty to return all available listings until the source is exhausted.

Use a saved category or search URL to monitor a market, check broker inventory, build a shortlist, compare asking prices, revenue, and cash flow, review public contact paths, track franchise resale opportunities, or feed listing rows into your own research workflow.

You can also export listing rows for use in spreadsheets, CRMs, BI tools, or internal research apps.

⚙️ Input

Input fields

FieldTypeWhat it does
startUrlsarray of objectsBusinessesForSale search, category, franchise, or individual listing URLs you already have.
startUrls[].urlstringOne public BusinessesForSale URL to use as a source target.
searchKeywordsarray of stringsBusiness types, sectors, brands, or other words for generated searches.
maxResultsintegerOptional limit for saved listings across all URLs and keyword searches. Leave it empty to return all available listings until the source is exhausted.
includeListingDetailsbooleanOpen each listing page to add fuller public details and media when available. Turn it off to use source list-page data only.
countrystringBusinessesForSale country site for generated keyword searches: global, us, uk, ca, au, or nz.
industrystringOptional BusinessesForSale category slug, such as restaurants or coffee-shops, for generated searches.
locationTextstringOptional city, region, state, or country words for generated searches.
sortOrderstringOrder for generated searches: newest, featured, price, revenue, or cash flow in either direction.
minPriceintegerLowest visible asking price for generated searches.
maxPriceintegerHighest visible asking price for generated searches.
minRevenueintegerLowest visible revenue for generated searches.
maxRevenueintegerHighest visible revenue for generated searches.
minCashFlowintegerLowest visible cash flow for generated searches.
maxCashFlowintegerHighest visible cash flow for generated searches.
onlyDisclosedPricebooleanKeep only generated-search listings that show an asking price.
onlyDisclosedRevenuebooleanKeep only generated-search listings that show revenue.
onlyDisclosedCashFlowbooleanKeep only generated-search listings that show cash flow.

Successful default input

This example is copied from the public default input for a successful Hosted QA run. The prefilled URL and keyword can be used together.

{
"startUrls": [
{
"url": "https://www.businessesforsale.com/search/coffee-shops-for-sale"
}
],
"searchKeywords": [
"coffee shop"
],
"country": "global",
"industry": "",
"locationText": "",
"sortOrder": "newest",
"maxResults": 25,
"includeListingDetails": true
}

🧾 Output

Output shape: one listing row

FieldTypeWhat it does
listingIdstring or nullPublic listing identifier when the source provides one.
urlstringCanonical public URL for the listing.
sourceUrlstringSearch, category, franchise, or listing URL that caused this row to be saved.
resultPositioninteger or nullListing position in its source results when available.
titlestringName shown for the business or franchise listing.
listingLabelsarray of stringsLabels shown on the source listing, such as New or Franchise.
listingLabels[]stringOne label shown on the source listing.
listingClassstring or nullSource classification, such as business or franchise, when available.
locationobjectSource location object.
location.displaystring or nullFull location text shown by the source.
location.countrystring or nullCountry shown by the source.
location.regionstring or nullRegion, state, or province shown by the source.
location.citystring or nullCity shown by the source.
descriptionstring or nullBest public description or summary from the source.
financialsobjectSource financial values with original text and any clear parsed amount and currency.
financials.askingPriceobjectAsking price object.
financials.askingPrice.textstring or nullOriginal asking price wording from the source.
financials.askingPrice.amountnumber or nullOne parsed asking price amount when the source gives a clear amount.
financials.askingPrice.currencystring or nullCurrency for the parsed asking price amount.
financials.revenueobjectRevenue object.
financials.revenue.textstring or nullOriginal revenue wording from the source.
financials.revenue.amountnumber or nullOne parsed revenue amount when the source gives a clear amount.
financials.revenue.currencystring or nullCurrency for the parsed revenue amount.
financials.cashFlowobjectCash-flow object.
financials.cashFlow.textstring or nullOriginal cash-flow wording from the source.
financials.cashFlow.amountnumber or nullOne parsed cash-flow amount when the source gives a clear amount.
financials.cashFlow.currencystring or nullCurrency for the parsed cash-flow amount.
financials.ebitdaobjectEBITDA object.
financials.ebitda.textstring or nullOriginal EBITDA wording from the source.
financials.ebitda.amountnumber or nullOne parsed EBITDA amount when the source gives a clear amount.
financials.ebitda.currencystring or nullCurrency for the parsed EBITDA amount.
businessobjectSource categories and tags.
business.categoriesarray of objectsCategories linked to the listing by the source.
business.categories[]objectOne category linked to the listing by the source.
business.categories[].namestringCategory name shown by the source.
business.categories[].urlstringPublic URL for the category.
business.tagsarray of stringsTags shown by the source for the listing.
business.tags[]stringOne tag shown by the source for the listing.
detailsobjectPublic facts about premises, lease, operations, support, and growth.
details.realEstatestring or nullReal-estate or ownership term shown by the source.
details.leaseTermsstring or nullLease terms shown by the source.
details.premisesstring or nullPremises facts shown by the source.
details.employeesstring or nullEmployee count or wording shown by the source.
details.yearsEstablishedstring or nullYears established shown by the source.
details.tradingHoursstring or nullTrading hours shown by the source.
details.supportTrainingstring or nullSupport or training terms shown by the source.
details.reasonForSellingstring or nullReason for selling shown by the source.
details.expansionPotentialstring or nullExpansion details shown by the source.
mediaobjectDirect public image URLs from the source.
media.imageUrlsarray of stringsDirect public image URLs for the listing.
media.imageUrls[]stringOne direct public image URL for the listing.
contactobjectPublic seller or broker contact details shown by the source.
contact.urlstring or nullPublic contact URL for the seller or broker.
contact.sellerNamestring or nullSeller or broker name shown by the source.

Example listing row

This genuine row is from a successful current-beta run with listing details enabled. It shows public financial, category, media, detail, and contact fields when the source provides them.

{
"listingId": "3994790",
"url": "https://uk.businessesforsale.com/uk/established-london-bakery-brand-with-strong-online-sales.aspx",
"sourceUrl": "https://uk.businessesforsale.com/uk/established-london-bakery-brand-with-strong-online-sales.aspx",
"resultPosition": 1,
"title": "Established London Bakery Brand With Strong Online Sales For Sale",
"listingLabels": [
"Advertisement"
],
"listingClass": "business",
"location": {
"display": "Battersea, London, UK",
"country": "UK",
"region": "London",
"city": "Battersea"
},
"description": "An established London bakery, café and online cake business with a distinctive brand, loyal customer base and strong digital presence. The business…",
"financials": {
"askingPrice": {
"text": "£1,000,000 Furniture / Fixtures and Inventory / Stock included",
"amount": 1000000,
"currency": "GBP"
},
"revenue": {
"text": "£500K - £1M",
"amount": null,
"currency": "GBP"
},
"cashFlow": {
"text": "Not applicable",
"amount": null,
"currency": null
},
"ebitda": {
"text": null,
"amount": null,
"currency": null
}
},
"business": {
"categories": [
{
"name": "Worldwide",
"url": "https://www.businessesforsale.com/search/businesses-for-sale"
},
{
"name": "Buy a Business",
"url": "https://uk.businessesforsale.com/uk/search/businesses-for-sale"
},
{
"name": "Buy a Franchise Resale",
"url": "https://uk.businessesforsale.com/uk/search/franchise-resales-for-sale"
},
{
"name": "Bakers and Confectioners in London",
"url": "https://uk.businessesforsale.com/uk/search/bakers-and-confectioners-for-sale-in-london"
},
{
"name": "Bakers and Confectioners",
"url": "https://uk.businessesforsale.com/uk/search/bakers-and-confectioners-for-sale"
},
{
"name": "Coffee Shops",
"url": "https://uk.businessesforsale.com/uk/search/coffee-shops-for-sale"
},
{
"name": "E-Commerce Businesses",
"url": "https://uk.businessesforsale.com/uk/search/e-commerce-businesses-for-sale"
},
{
"name": "Coffee Shops in London",
"url": "https://uk.businessesforsale.com/uk/search/coffee-shops-for-sale-in-london"
},
{
"name": "E-Commerce Businesses in London",
"url": "https://uk.businessesforsale.com/uk/search/e-commerce-businesses-for-sale-in-london"
},
{
"name": "Businesses in London",
"url": "https://uk.businessesforsale.com/uk/search/businesses-for-sale-in-london"
}
],
"tags": []
},
"media": {
"imageUrls": [
"https://uk.businessesforsale.com/uploads/0caedbae-c5e2-4e0e-8758-b4b500aa5f7c.jpg?PeeY4sBM3vzWgA35vwjC/A==",
"https://uk.businessesforsale.com/uploads/eb994104-f851-4327-a542-b4b500a99f19.jpg?mkUnkIKwSH3RagK0nLE2dQ==",
"https://uk.businessesforsale.com/uploads/9a477251-3357-424f-8625-b4b500a9b069.jpg?wT/22hTEFTiHujkBAMZNzA=="
]
},
"details": {
"realEstate": null,
"leaseTerms": "6 years with 3 years break clause. Fixed Annual rent increase of 3%.",
"premises": "Arch 64 is a large, modern premises combining: Customer-facing café and seating areas Cake production and decorating facilities Commercial kitchen space Storage and refrigeration Dedicated areas for cake decorating classes, afternoon teas and private events Leisure facilities including pool tables and a dartboard Collection and dispatch facilities for online orders The premises underwent significant investment prior to opening, including building works, kitchen and production equipment, refrigeration, furniture, customer areas and general fit-out. One of the key advantages of the site is that it was designed to support substantially more production than the business currently requires. The existing infrastructure provides capacity for future growth without the need for a major relocation or significant additional capital expenditure. The production operation is visible from the customer areas, which also supports the brand's positioning as a specialist bakery and creates a distinctive customer experience.",
"employees": "18",
"yearsEstablished": "2019",
"tradingHours": "Monday to Sunday 0730-1700",
"supportTraining": "Transition period, training or support is available subject to negotiations.",
"reasonForSelling": "My wife has been offered a once in a lifetime career opportunity in Abu Dhabi, and after many years of building our life in London, I feel that it is now my turn to support her and take this next step together. As a result, we have made the decision to relocate to Abu Dhabi. This is the principal reason I am considering the sale of Jack & Beyond. The decision is therefore driven by personal circumstances and relocation rather than by the performance or future potential of the business. Having spent years building Jack & Beyond, I would like to find the right purchaser who can take the business into its next stage of growth and realise the considerable potential that has already been created.",
"expansionPotential": "There is significant potential to expand Jack & Beyond using the infrastructure, brand and established online customer base already in place. The principal opportunity is to increase utilisation of the Arch 64 production facility. The site was designed with substantial spare capacity and provides the platform to scale the business to approximately 10 times its current revenue, subject to further investment in equipment, staffing and sales growth. This gives a purchaser the opportunity to grow the business substantially without the need for another major production facility in the near term. Potential growth opportunities include: Increasing online cake sales across London Further developing same day and next day cake delivery Expanding corporate gifting and corporate cake accounts Growing weddings, large celebrations and bespoke cake orders Expanding cake decorating classes and other experiences Increasing private hire and events at Arch 64 Developing afternoon tea and experiences Expanding UK wide delivery of suitable products Increasing partnerships with hotels, offices, event venues and hospitality businesses Further investment in SEO, Google Ads, social media and influencer marketing Increasing wholesale and B2B supply Introducing additional seasonal and limited edition products Potentially expanding the brand into additional London locations once the existing production capacity is more fully utilised The current production facility has been designed with growth in mind. With relatively modest additional investment in equipment, production capacity could be increased considerably, meaning that future revenue growth should not require a proportionate increase in fixed premises costs. This provides a purchaser with the opportunity to acquire not only an established trading business, but also a platform capable of supporting substantially greater turnover."
},
"contact": {
"url": "https://uk.businessesforsale.com/uk/established-london-bakery-brand-with-strong-online-sales/contact",
"sellerName": null
}
}

💳 Pricing

This Actor uses pay-per-event pricing. You are charged for each business or franchise listing saved to the dataset. Duplicate listings, skipped inputs, empty searches, and detail-page misses do not create saved-listing charges.

Apify platform usage costs are separate. Keep your first run small if you want to inspect the output shape before collecting a larger market snapshot.

Limits and caveats

BusinessesForSale pages vary by country, category, broker, and listing type. Some listings show full financials and operations details, while others only show a short card. The Actor keeps visible source text and leaves unavailable values as null or empty arrays.

Ranges such as $100K - $250K are preserved as text. The numeric amount is only filled when the source shows one clear amount.

🔌 Integrations

Open the finished dataset in Apify and export it as JSON, CSV, Excel, XML, or HTML. You can also call the Actor through the Apify API, schedule repeat runs in Apify, or connect Apify webhooks.

❓ FAQ

What happens if I run with no URL or keyword?

The Actor finishes with zero dataset rows and shows a warning that you need a public URL or keyword. No saved-listing event is charged because no listing row is saved. Add a target and run again when you are ready.

Do pasted URLs use the keyword filters?

No. Keyword, industry, location, sort, and financial fields apply only to searches generated from keywords. Pasted URLs keep their own country, category, location, and sort.

How are duplicate listings handled?

The Actor saves the first eligible occurrence of a source listing and ignores later matches from other submitted URLs or keywords. The saved row keeps the source URL for that first match.

Should I fetch listing details?

Leave includeListingDetails off when source list-page data is enough. Turn it on when you want fuller public details and media from listing pages when available.

Why are some financial values empty?

Sellers disclose different information. The Actor keeps visible ranges and text, and it leaves unavailable values as null or empty arrays instead of guessing.

Can I contact sellers with this Actor?

No. It saves a public contact URL or seller name when the source shows one, but it does not submit forms, message sellers, or reveal private contact details.

Can I schedule repeat market checks?

Yes. You can schedule the Actor in Apify, call it through the Apify API, or export finished datasets after a run.

📝 Changelog

1.0: Expanded listing data and search options

  • Added structured business and franchise listing details, direct listing targets, and optional detail enrichment.
  • Added flexible keyword filters and clear guidance for empty runs.

v0.0

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré