Bob Shop Product & Competitor Monitor avatar

Bob Shop Product & Competitor Monitor

Pricing

from $1.00 / 1,000 product listings

Go to Apify Store
Bob Shop Product & Competitor Monitor

Bob Shop Product & Competitor Monitor

Scrape public Bob Shop products and auctions for prices, bids, sellers, stock and shipping. Monitor competitor listing changes across runs.

Pricing

from $1.00 / 1,000 product listings

Rating

0.0

(0)

Developer

Inus Grobler

Inus Grobler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Categories

Security

Limited permissions

Share

Track public Bob Shop listings from a product keyword, search page, seller page, or exact product URL. Each run returns one row per listing, including fixed prices or auction bids, seller, condition, availability, quantity, and shipping price when shown. Repeat a run with the same targets to see which listings are new or changed.

Use it to compare sellers for a product search, watch an auction bid, or follow prices and stock on a set of listings. This is an independent monitoring tool and is not affiliated with Bob Shop.

Input

In Apify Console, enter a keyword or a public Bob Shop search, seller, or product URL under What to monitor, then select Start. Results appear in the default dataset; the Output tab links to the products and the run summary.

Only the targets are required. This input returns up to five products with details:

{
"targets": ["iphones"]
}
InputDefaultWhat it does
targets — What to monitorExample: ["iphones"]One to 20 keywords or public Bob Shop URLs. For example, iphones or https://www.bobshop.co.za/search/coins.
maxListings — Number of products5Maximum unique products across all targets, from 1 to 1,000. Availability and search results can produce fewer rows.
includeDetails — Include product detailstrueAdds seller descriptions, shipping rates, and product-page quantities when available. Keep it on for stock monitoring; turn it off for faster listing-only runs.

Output

The Products table shows each listing's title, price or current bid, listing type, seller, quantity, starting shipping rate, change, and product link. Export the dataset as JSON, CSV, or Excel.

FieldsMeaning
listingId, url, titleThe product's identifier, public URL, and title. Each listing appears once per run.
listingType, priceOrBid, price, currentBidFIXED_PRICE rows use price; ENGLISH_AUCTION rows use currentBid. priceOrBid provides the relevant value for either type. Currency is returned in currency, normally ZAR.
sellerName, stockQuantity, shippingPrice, descriptionPublic seller and product details. Missing values are null; descriptions are limited to 1,000 characters.
changeType, changedFields, previousValuesNEW on first observation, UPDATED when a tracked value changes, or UNCHANGED. Updates identify the fields and their previous values.
firstSeenAt, observedAt, sourceTargetsFirst observation, current run observation time, and the targets that found this listing. Times use UTC.

Tracked changes cover fixed price, auction bid, auction buy-now price, availability status, verified stock quantity, and starting shipping rate. Other fields, such as titles and descriptions, are collected but do not trigger UPDATED.

With product details off, quantity comes from search cards and may lag the product page. These quantities are displayed but do not trigger stock-change alerts. A stock baseline is established when the product page supplies a quantity; subsequent verified changes are reported as UPDATED. If details are turned off, a detail request fails, or a product page has no quantity, the last verified quantity is retained for the next successful comparison. A change reported after a gap happened since the last verified observation; its exact time is not known.

shippingPrice is the starting shipping rate shown in the page's structured offer. Checkout charges can vary by destination.

Comparison history is separated by the target set. Changing a target creates a new baseline. Missing search results are not treated as removals. The Actor reads public Bob Shop HTML pages and embedded page data; it does not call Bob Shop APIs, log in, or download images. Bob Shop pages and values can change, and a partial run is identified in Run status.

The run summary includes the number of products and detail pages collected. If a request or time limit stops detail collection, the search-page listings already found are still returned and the summary reports PARTIAL. A customer spending cap can also limit the number of listings; the summary then shows MAX_TOTAL_CHARGE_USD as the limit reason. A platform run can finish with Succeeded status while its summary is PARTIAL, so check the summary when completeness matters. A run that collects no listings fails with an explanation.

The Actor follows pagination and sets a request limit automatically. Large runs with product details can take several minutes; a 1,000-product detail run took about 10 minutes in testing. Listing-only runs use far fewer requests.

Example listing row:

{
"listingId": "591438859",
"url": "https://www.bobshop.co.za/apple-iphone-xs-pristine-pre-owned/p/591438859",
"title": "Apple iPhone XS - Pristine Pre-Owned",
"listingType": "FIXED_PRICE",
"priceOrBid": 4230,
"price": 4230,
"currentBid": null,
"currency": "ZAR",
"sellerName": "Mobitronics",
"changeType": "NEW",
"changedFields": [],
"observedAt": "2026-09-28T19:41:11.400Z"
}

Cost and limits

The price is $1 per 1,000 returned products ($0.001 per row), including UNCHANGED rows on repeat runs, plus a $0.00005 Actor start event at the default 512 MB memory setting. Platform usage is included. Five returned products cost approximately $0.00505 in Actor events.

Set a maximum run charge in Apify to control spending. The minimum accepted spending cap is $0.05; actual event charges depend on the products returned and the start event. The Actor reduces collection to fit the cap before fetching listings. The maximum is 1,000 products per run.

When you provide several targets, the listing limit is shared among them in input order so an early search cannot consume every slot. Set maxListings to at least the number of targets if you want a chance of seeing a listing from each one.

Troubleshooting

  • If there are no rows, check the keyword or URL directly on Bob Shop. The Actor accepts public search, seller, and product pages only.
  • If Run status says PARTIAL, inspect its error codes or limitReason. The rows already returned are usable, but some targets or product details may have been missed, or a spending cap reduced collection.
  • For stock monitoring, keep Include product details on. Search-card quantities can lag product pages and do not trigger stock-change alerts.
  • A listing missing from a later search is not reported as removed. Search ranking and availability can change between runs.

For help, report an issue through this Actor's Issues tab in Apify Console. Include the run ID, the affected public product URL, and the field you expected to see.

Python example

This example uses the current Apify API client for Python 3.x.

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("thescrapelab/bobshop-product-competitor-monitor").call(run_input={
"targets": ["iphones"],
})
if run is None:
raise RuntimeError("The Actor did not finish within the client's wait time")
record = client.key_value_store(run.default_key_value_store_id).get_record("OUTPUT")
if record is not None:
print("Run summary:", record["value"])
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["title"], item.get("priceOrBid"), item["changeType"], item["url"])