ProductReview.com.au Scraper - Products, Businesses & Reviews avatar

ProductReview.com.au Scraper - Products, Businesses & Reviews

Pricing

from $1.00 / 1,000 results

Go to Apify Store
ProductReview.com.au Scraper - Products, Businesses & Reviews

ProductReview.com.au Scraper - Products, Businesses & Reviews

Scrape ProductReview.com.au products, businesses and customer reviews. Search by location, category or custom query with advanced filters. Extract business details, ratings, review content and structured review insights.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(1)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

2

Bookmarked

57

Total users

12

Monthly active users

2 days ago

Last modified

Share

ProductReview.com.au Scraper: Listings & Customer Reviews

Turn ProductReview.com.au into structured data. Browse a category or paste direct links, then pull company profiles (rating, contact details, address, FAQs) or full review threads (rating, text, verified purchase flag, images, replies) for any Australian brand, retailer or service on the site. Export to JSON, CSV or Excel, or read results straight from the API.

Why This Scraper?

  • Two ways to find listings. Filter mode picks a category plus location, sort and discontinued filters (type a plain name like 'Air Fryers'/'Victoria', or a raw site slug, either works). URL mode pastes explicit search, category or listing links, every shape the site has. No need to build URLs by hand.
  • Two output shapes. Listings output emits one row per listing with up to 10 preview reviews embedded. Reviews output emits one row per review with a pointer back to its listing. For listings and reviews from a single pass, keep Listings output and open the Listing reviews view in the Output tab (or ?view=listing-reviews on the dataset items API): it unwinds each listing's embedded reviews[] into one table row per review.
  • Full company profile. Contact details, address, opening hours, description, FAQs and specifications come alongside the rating and review count.
  • Full review detail. Rating, verified purchase flag, attached images, and any replies from the company or other users.
  • Multi-URL in one run. Mix category pages, search pages and direct listing links in the same list. Each is auto-routed by its own shape.
  • Built for schedules. Incremental mode tracks a search or URL list run after run and returns only what is new, updated or reappeared.
  • Honest about the site's own limits. A category or search page ships about 30 results and the site does not page past that. The actor logs this limit instead of silently under-delivering.

Use Cases

  • Reputation management teams: monitor new and updated reviews for your own company listing on a recurring schedule.
  • Consumer research and comparison sites: pull ratings, review counts and company profiles across a whole category.
  • Data science and NLP teams: build labeled sentiment or topic datasets from review text, ratings and verified purchase flags.
  • Marketing and competitor analysis: track a competitor's rating trend and recent review volume over time.
  • Company owners: export every review and reply for a single listing for reporting outside the site.

Data You Get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
id"00000000-0000-0000-0000-000000000001" (listings output)
name / slug"Sample Lighting Co." / "sample-lighting-co" (listings output)
detailsUrl"https://www.productreview.com.au/listings/sample-lighting-co" (listings output)
brand.name"Sample Brand" (listings output)
categories[].name / locations[].name"Lighting Shops" / "Victoria" (listings output)
statistics.rating / statistics.numberOfReviews4.5 / 1234 (listings output)
isDiscontinuedfalse (listings output)
contact.email / contact.phone"support@example.com" / "+61000000000" (listings output)
address.formatted"Sample St, Sample Suburb, VIC 0000, Australia" (listings output)
description / faqs[].question"Full company description appears here." / "Sample question?" (listings output)
logoUrl / pictureUrlCDN image links (listings output)
totalReviews / reviewPages1234 / 42 (listings output)
reviews[] / specificationValuesup to 10 preview reviews embedded from page 1, and a product's spec sheet keyed by the site's own labels such as {"Power": "1700"} (specifications carries the same map; both stay {} for companies) (listings output)
title / body"Sample review title" / "Sample review body text." (reviews output)
rating5 (reviews output)
submittedAt"2026-01-01T00:00:00.000Z" (reviews output)
hasVerifiedPurchasetrue (reviews output)
images[].urlCDN attachment link (reviews output)
author.displayName / author.locationName"Reviewer Name" / "Sample City" (reviews output)
comments[]replies from the company or other users (reviews output)
sourceListing.id / sourceListing.namepointer back to the parent listing (reviews output)
recordType / reviewsCollected / searchUrl"listing" / 10 / the result page URL, a row-kind tag, how many reviews are embedded, and the page the listing was found on (listings output)
numberOfLikes / numberOfDislikes / isVerified3 / 0 / true, helpful-vote counters and the site's own "verified reviewer" flag, distinct from hasVerifiedPurchase (reviews output)
firstPublishedAt / modifiedAt / tags[]"2026-09-14T05:53:05.000Z" / "2026-09-15T00:00:00.000Z" / ["edited"] (reviews output)
followUps[] / footnote / specificationValues / subjectlater reviewer follow-ups, a moderation note if any, {"Incentivised Review": "No"} (ids resolved to the site's own labels), and the listing/variant the review is actually about (reviews output)

How to Use

  1. Pick a mode: search (filter by category) or url (paste explicit links).
  2. Choose an outputType: listings (one row per listing) or reviews (one row per review).
  3. Fill in the fields for your mode, and set Max Output Rows to control run size and cost.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Filter mode, listings output. Preview shops in a category:

{
"mode": "search",
"outputType": "listings",
"category": "home-garden-shops",
"limit": 20
}

Filter mode, reviews output. A plain category NAME and location NAME, resolved automatically:

{
"mode": "search",
"outputType": "reviews",
"category": "Lighting & Fan Shops",
"location": "Victoria",
"sortBy": "rating",
"limit": 200
}

category and location each accept either a raw site slug (home-garden-shops, victoria_au) or a plain name typed the way a human would ('Air Fryers', 'Victoria', 'Sydney'). A name is resolved to its slug via the site's own category/location search; the run fails with a clear error if nothing matches, instead of silently crawling the wrong category or an unfiltered default.

URL mode, reviews output. Every review for one listing:

{
"mode": "url",
"outputType": "reviews",
"urls": ["https://www.productreview.com.au/listings/the-lighting-outlet"],
"limit": 1000
}

URL mode: every supported shape

Each pasted URL is auto-routed by its own shape. category/searchQuery/location/sortBy/showDiscontinued are ignored in URL mode; paste the filters directly into the URL instead.

ShapeExampleRouted as
Listing/listings/the-lighting-outletOne listing/reviews fetch.
Category/c/home-garden-shopsA result page (up to ~30 listings).
Category + location/c/home-garden-shops/l/victoria_auA result page filtered to that location.
Category + sort param/c/home-garden-shops?sort=ratingA result page in that sort order (same sort param the Filter mode sortBy field writes).
Category + search query/c/home-garden-shops?q=lightingA result page narrowed by that text, exactly like the Filter mode searchQuery field (live check: 3,483 category hits narrow to 109).
Category + brand filter/c/air-fryers?brand=brevilleA result page narrowed to that brand. The singular brand= is rewritten to the site's own brands= filter (the site ignores the singular form), so it narrows exactly like the Filter mode brands field; an unknown brand fails loudly instead of returning an unfiltered page.
Search/search?q=lightingA result page for that query.
Listing + review filter/listings/the-lighting-outlet?rating=1One listing, reviews narrowed to that star rating. The filter is carried through every page of reviews, not just the first.
Listing + verified-reviews filter/listings/the-lighting-outlet?isVerified=trueOne listing, reviews narrowed to verified purchases only, like the reviewVerifiedOnly field. The filter is carried through every page of reviews.
Listing + review page number/listings/beacon-lighting?page=2The listing itself. The pasted page=2 is ignored and reviews start at page 1.
Listing write-review link/listings/bunnings-warehouse/write-reviewNormalized to the plain listing, then one listing/reviews fetch.
Category + page number/c/kitchenware-shops?page=2The category's first result page. The site serves page 1 for it (no real category pagination), so it counts as page 1 and, for incremental EXPIRED, as a partial scope.

Default list. With mode set to url and the urls field left untouched, the actor now scrapes one example URL per shape above (12 URLs, 3 of them the original defaults) instead of the previous 3. This is a behaviour change: an untouched URL-mode run now returns rows for every shape rather than only three URLs, and the limit cap (default 20 rows) is shared across all URLs of the run, so raise it to see every example. The page-number, write-review and category-page examples point at other listings and categories (beacon-lighting, bunnings-warehouse, kitchenware-shops) so none of them collapses into another entry. The two review-filter examples (?rating=1, ?isVerified=true) share the the-lighting-outlet listing, so the actor fetches that listing once per distinct filter. Clear the list or replace it with your own URLs to scrape only those; an explicitly empty list still falls back to the default category page.

Normalization rules applied before fetching:

  • A listing sub-path the site doesn't serve as the listing itself, such as /listings/<slug>/write-review, is normalized to the plain /listings/<slug> URL first.
  • A page=N on a pasted listing URL is dropped: Reviews output always starts from the first page of reviews, so a pasted page number is never used as a starting offset (it could otherwise duplicate or skip pages). Every other query param (e.g. rating=1) rides along unchanged, including into every later page of reviews.
  • A singular brand=<slug> on a category URL is rewritten to the site's brands=<slug> filter before fetching (the site silently ignores the singular form and would return the unfiltered category). Several brands can be comma-separated.
  • A literal &amp; between query params, the HTML-entity form you get pasting a URL copied out of rendered page source or an email, is decoded to & before the URL is parsed, so a filter after it is never silently dropped.
  • A bare productreview.com.au host (no www.) is accepted the same as www.productreview.com.au (the site itself 301s one to the other). A host that only looks like this site (e.g. a lookalike domain) is rejected with a loud warning, never fetched as if it were this site's own page.
  • A shape this site doesn't serve this way, such as a brand page (/brands/*), /i/*, or a listing's /questions sub-page (all confirmed to 404 live), gets a loud per-URL warning in the run log and is skipped, never a silent 0-result request. Any other URL in the same run still proceeds normally.
  • A pasted listing URL is always fetched directly by its own slug. This actor never resolves a pasted URL via a text search, so it can never match an unrelated listing by accident.

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/product-reviews-australia-scraper").call(run_input={"mode": "search", "outputType": "listings", "category": "home-garden-shops"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["statistics"]["rating"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/product-reviews-australia-scraper').call({ mode: 'search', outputType: 'listings', category: 'home-garden-shops' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Why some runs return fewer rows than expected

A ProductReview category or search page ships its own single page of roughly 30 results, and the site does not support paging past it. Raising Max Output Rows above that page size will not surface more listings for the same search. Narrow the category, add a location, or use a search query instead. This same page limit is also why emitExpired cannot fire for a category larger than one page: the actor can only ever see that page, so it never proves the rest of the category is gone.

Resume and recurring updates

Two different features, both under the input's Resume & recurring updates section:

  • resumeFromRunId continues ONE specific interrupted run. Paste a previous run or dataset ID and this run appends only rows it has not already collected there.
  • incrementalMode is for scheduling this actor again and again against the same search or URL list. Each row is fingerprinted against the previous run for that scope and classified NEW, UPDATED (with changedFields), UNCHANGED, REAPPEARED, or EXPIRED. Only NEW/UPDATED/REAPPEARED are returned and billed by default; turn on emitUnchanged or emitExpired to also get (and be billed for) the rest. What is compared is every output field of the row: a listing is UPDATED when its name, brand, rating or review counts, price, offers, specifications, company details or embedded reviews change, and a review row when its title, body, rating, votes, replies or author change, with changedFields naming what moved. Excluded from the comparison (but still present in every row) are scrapedAt, searchUrl, and, on review rows, the parent listing's running counters sourceListing.rating and sourceListing.numberOfReviews, plus anything you add under ignoreFieldsForChanges. A field this actor newly starts returning is never counted as a change. stateKey names or shares one monitoring campaign; left empty, it is derived from the mode, category, query, location, sort and URL settings. EXPIRED rows are capped at whatever headroom is left under Max output rows for this run, so a small cap against a large tracked baseline never blows past your own limit on expiry rows alone; anything past that budget is left untouched for a future run to catch.
  • ignoreFieldsForChanges (incremental mode only) excludes field names from the fingerprint used to decide UPDATED vs UNCHANGED, in addition to what this actor already ignores by default, currently scrapedAt, the per-run scrape timestamp, searchUrl, the search page a product was found on (with several overlapping search URLs, which page reaches a product first can vary from run to run), and, on review rows, sourceListing.rating and sourceListing.numberOfReviews, the parent listing's running counters (one new review on a listing would otherwise flag every other tracked review from it). None of them is a real content change of the row. Use a plain name (e.g. numberOfQuestions) to ignore that field everywhere it appears, or a nested path (e.g. sourceListing.rating) to ignore it only at that exact spot. An ignored field still shows up in the row, it just never triggers UPDATED or appears in changedFields. Editing this list does not retroactively flag your existing tracked records as UPDATED; only a field that actually changed does that.

Output views

Open the Output tab and pick a view, or add ?view=<id> on the dataset items API:

ViewWhat it shows
ResultsMixed overview of listings or reviews with the key identity, rating and change columns.
Listings OverviewOne row per listing: rating, review count, lowest price, recommended retail price (RRP, a range such as "$399 to $549" for products with variants), images, discontinued flag.
ReviewsOne row per review: rating, title, body, dates, author, verified flags, votes, tags.
Listing DetailCompany details, FAQs, specifications, AI reviews summary, price and availability.
Changes since the last runIncremental mode: change type, changed fields and first/last seen.
Listing Reviews (one row per review)Unwinds the reviews embedded on each listing row into one table row per review.
Contact InformationName, email, website, phone and formatted address.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape. The Apify dataset is never changed.

What gets written to the connector: a condensed, human readable summary of each row, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you have not authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchDiscovery method. search builds a URL from the filter fields below; url uses the urls list and ignores filter fields.
outputTypestringlistingsRow shape. listings is one row per listing with embedded preview reviews. reviews is one row per review with a sourceListing pointer.
categorystringhome-garden-shopsFilter mode only. Category slug (home-garden-shops) or plain name (Air Fryers), resolved to its slug via the site's own search. The actor builds /c/<slug>. Falls back to home-garden-shops if left empty.
searchQuerystring(none)Filter mode only. Appended as ?q= to narrow results in the chosen category.
locationstring(none)Filter mode only. Location slug (victoria_au) or plain name (Victoria, Sydney), resolved to its slug via the site's own search. Inserted as /c/<cat>/l/<loc>.
showDiscontinuedbooleanfalseFilter mode only. Include discontinued products or services in the results.
sortBystring(default order)Filter mode only. One of relevance, rating, numberOfReviews, popularity, lowestPrice, highestPrice, newest, oldest, passed straight through as the site's own sort parameter. review_count is also accepted and means numberOfReviews.
brandsarray(none, all brands)Filter mode only. Only listings from these brands. Type the brand name or its slug (Breville, delonghi). Several brands are combined with OR. The run fails loudly instead of silently returning unfiltered results if a brand is not recognized.
minRatinginteger(none, all ratings)Filter mode only. Only listings rated this many stars and up (1-4), using the site's own rating filter. Filters listings, not individual reviews; use reviewRating below for that.
urlsarrayone example URL per supported shape (12 URLs: the 3 original defaults plus 9 more)URL mode only. Each URL is auto-routed by its shape (see the shapes table above). Left untouched, a URL-mode run scrapes all 12 examples, not the previous 3. The input editor's "Prefill example" shows one URL per supported shape (all 12). If left empty in URL mode, the actor falls back to the default category page.
maxReviewsPerListinginteger(unset = mode default)Caps reviews from ONE listing. Unset keeps today's behaviour: 10 embedded previews in listings output, no per-listing cap at all in reviews output (only limit below applies there). Set it to embed more previews, or to spread a multi-listing reviews run more evenly instead of exhausting limit on the first listing.
reviewRatinginteger(none, all ratings)Only reviews with this star rating (1-5). A rating already on a pasted URL (URL mode) wins over this.
reviewVerifiedOnlybooleanfalseOnly reviews the site marks as a verified purchase.
reviewsWithAttachmentsOnlybooleanfalseOnly reviews that include at least one photo.
reviewSortBystring(empty = site default order)Order of a listing's reviews: overview (site default), newest, ratingHighest, ratingLowest, mostLiked. Passed straight through as the site's own sortBy parameter on the listing page. A sortBy already present on a pasted URL (URL mode) wins over this.
limitinteger20Cap on output rows. In listings output this caps listings (a category or search page itself returns roughly 30 hits). In reviews output this caps review rows; the actor continues onto further review pages until it is reached.
maxConcurrencyinteger4Maximum in-flight requests. Kept modest because the site throttles bursts from one IP.
proxyobjectApify Proxy (automatic group)Proxy settings. The default works on this site (see Plan Requirement); pick a different proxy group or country only if you want to.
mcpConnectorsarray(none)Optional. Send a summary of each row to apps authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only. Page under which item pages are created.
maxNotifyListingsinteger50Cap on rows written to each connector per run. Does not affect the dataset.
resumeFromRunIdstring(none)Continue one specific interrupted run or dataset, without re-returning or re-charging its rows.
incrementalModebooleanfalseTurn on for recurring runs against the same search or URL list. Classifies each row as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED.
stateKeystring(none)Incremental mode only. Names a monitoring campaign, or leave empty to derive one automatically from the search or URL settings.
emitUnchangedbooleanfalseIncremental mode only. Also return, and bill, rows unchanged since the previous run.
emitExpiredbooleanfalseIncremental mode only. Also return, and bill, rows no longer found, once a run has fully scanned its tracked scope. Capped at this run's remaining output headroom.
ignoreFieldsForChangesarray[]Incremental mode only. Extra field names (plain, or dotted for a nested path) to exclude from change detection, on top of the fields this actor already ignores by default (scrapedAt, searchUrl, sourceListing.rating, sourceListing.numberOfReviews).

Output Example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"id": "00000000-0000-0000-0000-000000000001",
"name": "Sample Lighting Co.",
"slug": "sample-lighting-co",
"detailsUrl": "https://www.productreview.com.au/listings/sample-lighting-co",
"brand": { "id": null, "name": "Sample Brand", "slug": "sample-brand", "url": "https://example.com", "isManaged": false },
"contact": { "email": "support@example.com", "phone": "+61000000000", "website": "https://example.com" },
"categories": [{ "name": "Lighting Shops", "level": "leaf", "hook": null, "ancestors": [] }],
"locations": [{ "name": "Victoria", "shortName": "VIC", "slug": "victoria_au", "level": "state" }],
"statistics": { "rating": 4.5, "numberOfReviews": 1234, "numberOfQuestions": 12, "ratingDistribution": [700, 300, 100, 80, 54] },
"isDiscontinued": false,
"featuredReview": null,
"highlightedReviews": [],
"address": { "streetAddress": "Sample St", "suburb": "Sample Suburb", "state": "VIC", "postcode": "0000", "country": "Australia", "formatted": "Sample St, Sample Suburb, VIC 0000, Australia" },
"businessHours": null,
"description": "Full company description appears here.",
"faqs": [],
"specifications": {},
"logoUrl": "https://cdn.productreview.com.au/resize/brand-logo/00000000",
"pictureUrl": "https://cdn.productreview.com.au/resize/listing/00000000",
"pictures": [],
"createdAt": "2020-01-01T00:00:00.000Z",
"totalReviews": 1234,
"reviewPages": 42,
"pagesScraped": 1,
"reviews": [],
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Reviews output emits a different shape per row: title, body, rating, submittedAt, hasVerifiedPurchase, images, author, comments, and a sourceListing pointer back to the parent listing, in place of the listing fields above.

Plan Requirement

A paid Apify plan with proxy access is required, and no proxy tier has been verified as sufficient on its own: this site was not measured per proxy tier, so the actor starts on the default Apify Proxy and, if a connection is refused for your account, escalates automatically to Apify Residential and then a backup connection, logging the switch once ("Served over the backup connection (the default connection was unavailable)."). On a free Apify plan, which has no residential proxy, it logs a boxed warning ("The selected connection is unavailable to this run. Apify free plans do not include residential proxies.") and continues on a backup connection, so some pages may be unavailable. It never falls back to a direct, unproxied connection. The proxy group you choose is your own cost and choice.

Rate limiting. The site answers a burst of roughly a dozen fast requests from one connection with an HTTP 429 "Just a moment..." page, which clears after about a minute. This is a rate limit, not a ban: the actor keeps its fan-out small, retires that connection, pauses new requests for a short run-wide cooldown (up to 15 seconds), and retries on a fresh connection. A request that never gets past it is counted as a failed page, never as "no results", and the affected scope is marked incomplete. If every page fails you get a clear failure: "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later." If the connection was refused outright: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required".

FAQ

How much does it cost?

You pay per row returned, in either listings or reviews output, plus a one-time start fee per run. Current rates by Apify plan: results $0.002 each on Free, $0.00167 Bronze, $0.00133 Silver, $0.001 Gold and above; start fee $0.10 Free, $0.09 Bronze, $0.08 Silver, $0.07 Gold and above. The Pricing tab always shows the live rates. Use Max Output Rows to cap the cost of any run.

This actor collects only publicly published listings and reviews. You are responsible for how you use the data: follow ProductReview's terms and the laws that apply to you, and get legal advice before republishing full review text or attaching a reviewer's name to a commercial use. Ratings and review counts are generally facts, but review text, photos and company descriptions may carry their own rights.

Can I track only new or changed reviews on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each row is fingerprinted against the previous run for that same search or URL list and classified NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED. Unchanged rows are not returned or billed unless you turn on Emit unchanged rows.

Why do I get fewer listings than my Max Output Rows?

A ProductReview category or search page returns about 30 results in one page, and the site does not support paging past it. The actor logs when it hits this limit. Raising Max Output Rows further will not add more listings for the same search; narrow the category, add a location, or use a search query instead.

Why did my run fail instead of returning an empty dataset?

The run fails outright only in two cases: Resume from a previous run points at a run or dataset ID this account cannot read, or Incremental mode is combined with Resume from a previous run on a state key that already has saved history. If no page at all could be loaded (every request refused, rate limited or failing), the run also fails with a clear connection message rather than an empty dataset. A few individual pages failing is logged and the run still finishes, possibly with fewer rows.

Can I use this with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

๐Ÿ”— Want more e-commerce data?

Pair this actor with these related scrapers from the same team:

๐Ÿ“‡ JobStreet
From $1/1K. Pull JobStreet company profiles and employee reviews across Malaysia...
๐Ÿ“‡ Yellow Pages AU
From $1/1K. Scrape business listings from Yellow Pages Australia by type and location...
๐Ÿ“‡ TrueLocal AU Directory Listings & Reviews Scraper
Scrape TrueLocal.com.au business listings by keyword, location, or URL. Extract names...
๐Ÿ›’ Flippa Scraper
From $0.80/1K. Scrape Flippa listings with full enrichment, including revenue, profit...
๐Ÿ“‡ Google Maps Scraper
Extract business data from Google Maps at scale. Get names, addresses, phone numbers...
๐Ÿ“‡ HiPages Scraper
Scrape business listings from HiPages Australia by category, location, or URL. Extract...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support & custom scrapers

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.