Lazada Singapore Geo-Price Scraper avatar

Lazada Singapore Geo-Price Scraper

Pricing

from $1.00 / 1,000 products

Go to Apify Store
Lazada Singapore Geo-Price Scraper

Lazada Singapore Geo-Price Scraper

Landed cost for Lazada Singapore: the auto-applied voucher price, shipping fee, guaranteed delivery date and stock. Every page is fetched through a real Singapore mobile line and every row carries the IP it came from. Run-over-run change detection is free.

Pricing

from $1.00 / 1,000 products

Rating

0.0

(0)

Developer

Xavier Fok

Xavier Fok

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

43 minutes ago

Last modified

Categories

Share

Lazada Singapore Scraper — real SG mobile IPs, real landed cost

Most marketplace scrapers give you a price. A price alone doesn't tell a Singapore buyer what the thing actually costs, or whether it arrives this week.

This actor returns landed cost and availability truth: price plus the auto-applied voucher, plus shipping fee, plus the guaranteed delivery date, plus stock, plus seller trust metrics — captured from a genuine Singapore mobile-carrier IP. Vouchers, shipping fees and delivery estimates are computed by Lazada from the requesting network. A datacenter or geo-parameter scraper either can't see them or sees the wrong ones. We run on real SG mobile lines, so what you get is what a Singapore shopper gets. Every single row carries egress_ip and egress_geo, so the Singapore claim is checkable on every record — no screenshot needed.

Record types

The dataset mixes four record types, each tagged with record_type — plus uncharged error rows naming any input that produced no data.

product — one row per product, flat and spreadsheet-ready:

position, item_id, nid, name, url, image, price, original_price, price_text, discount_pct, currency, rating, reviews, sold, in_stock, brand_name, brand_id, seller_name, seller_id, sku, sku_id, cheapest_sku, category_ids, location, is_lazmall, is_sponsored, traffic_type (organic vs ad), free_shipping, restricted_age, description (the seller's feature bullets) — and every row carries search_term, fetched_at, and egress_ip / egress_geo proving Singapore egress.

Plus the promo layer, which is where the SG price actually gets decided:

FieldExampleWhy it matters
voucher_text"Voucher save 58%"auto-applied at checkout
voucher_discount_pct58
voucher_price4.20 on a 10.00 listingthe real price to rank on
coin_cashback0.14LazCoin rebate
in_campaigntrueLazFlash / PAYDAY / campaign badge
is_new_arrivalfalse
badges["campaign","coins","lazmall","voucherapplied"]every badge, so a new promo type is never silently dropped

In a live 80-result Singapore capture, 79 of 80 products carried a voucher badge. Sorting that page by price and sorting it by voucher_price do not produce the same ranking. A scraper that only returns price is telling you the sticker, not the sale.

product_detail — opt-in via enrichProductDetails. This is the differentiated data:

FieldExample
price103.0
shipping_fee0.49
landed_cost103.49 — what a Singapore buyer actually pays
shipping_method"Standard"
delivery_from / delivery_to"2026-07-31" / "2026-08-01"
delivery_guaranteedtrue
stock_hint"Almost sold out, buy now!"
cash_on_deliveryfalse
gtin"194644216283" — barcode, for matching against any other catalogue
seller_positive_rating"99%"
seller_ship_on_time"100%"
seller_chat_response"93%"
warranty["100% Authentic", "Local Seller Warranty 18 months"]
variantsper-SKU price matrix (sale_price + original_price + image)
max_order_qty5
rating_histogram[206, 5, 3, 0, 1] — 5★ down to 1★
specificationsfull spec key/value map
flash_sale_remaining13 — units left in the LazFlash allocation (total - sold)
flash_sale_status"started" / "notStart" / "soldOut"
flash_sale_ends_at"2026-07-31T02:00:00Z"
price_labels["Lowest Price Guarantee"]
top_reviewsthe reviews Lazada embeds — text, rating, reviewer, photo URLs

flash_sale_remaining is hard inventory: Lazada allocates a fixed unit count to a flash deal, so total - sold is the actual number left, not a "selling fast" string. top_reviews is a sample of review_count, not the whole corpus — it rides along in the payload we already fetch, so it costs nothing extra.

change — opt-in via detectChanges, and free. Set it once and every later run tells you what moved since the last one, instead of handing you another full snapshot to diff yourself:

change_typeMeaning
price_drop / price_risesticker price moved — with before, after, delta, delta_pct
voucher_price_drop / voucher_price_risethe effective price moved, even when the sticker didn't
out_of_stock / back_in_stockavailability flipped
entered_results / left_resultsopt-in via reportResultChurn — see below

Every row also carries position_before / position_after, so you get rank movement without a rank-churn row for every product on every run. The first run of a keyword stores a baseline and reports nothing — there is no signal to report yet. Baselines live in a named key-value store (changeStateStore), so you can track the same keywords as separate series.

Why membership changes are off by default. Lazada rotates and personalises search results. Two runs of the same keyword ten minutes apart shared only 22 of 40 results in a measured pair — so entered_results / left_results would have fired 36 times while zero prices actually moved. Reporting that as "change" would bury the signal it exists to surface. Turn reportResultChurn on when you fixed the item set via productUrls, where a product going missing genuinely means something.

listing_meta — market structure for the keyword: total_results (how many products compete for it), brands (the brand facet Lazada shows), services (LazFlash, Choice, store pick-up), ship_from (Singapore / China / overseas), categories, breadcrumb.

Example

{ "record_type": "product_detail", "item_id": "3392809159",
"price": 103.0, "shipping_fee": 0.49, "landed_cost": 103.49,
"delivery_from": "2026-07-31", "delivery_to": "2026-08-01",
"delivery_guaranteed": true, "stock_hint": "Almost sold out, buy now!",
"gtin": "194644216283", "seller_positive_rating": "99%",
"seller_ship_on_time": "100%", "rating_histogram": [206, 5, 3, 0, 1] }

Two products on the same keyword, from one real run — the reason price alone isn't enough: $103.00 + $0.49 guaranteed by 1 Aug, versus $2.79 + $1.99 arriving 4–8 Aug. Shipping is 71% of the second item's cost.

Track a fixed SKU list

Pass productUrls to skip search entirely and fetch detail records straight from product pages — for monitoring a known catalogue daily. You are billed only for the detail records, not for listing pages you didn't need.

Good for

SG price and MAP monitoring where vouchers and shipping change the ranking · landed-cost comparison · promo and campaign tracking (who is running vouchers, how deep) · stock and delivery-promise tracking · seller vetting before you buy or partner · keyword competition sizing via total_results and the brand facet.

Inputs

searchTerms and/or categoryUrls drive it. maxPages walks past the 80-per-page limit, maxProductsPerTerm caps the total, sortBy picks Lazada's own ordering, and enrichProductDetails + maxDetailsPerTerm control the detail pass. detectChanges turns on run-over-run deltas, changeStateStore names the baseline store, and reportResultChurn adds result-membership rows.

captureScreenshot is off by default. It saves a PNG of the results grid, which is useful as a shareable artifact but adds nothing analytically — egress_ip / egress_geo already prove Singapore egress on every row — while costing storage and up to ~20s of compute per keyword waiting for the grid and its thumbnails to paint. Turn it on when you want the picture.

Pricing

Pay-per-event, so you only pay for data that actually arrived:

RecordPricePer 1,000
product$0.001$1.00
product_detail (landed cost, GTIN, seller trust)$0.005$5.00
listing_meta (one per keyword)$0.002$2.00

Plain product rows are the cheapest in the category — and they already carry the voucher layer, so you get the effective SG price at $1.00 / 1,000. The enrichment tier adds the shipping-and-delivery half of landed cost, and it's opt-in.

You are never charged for a blocked page, a non-Singapore egress, or a page that returned zero products. Enrichment is off by default.

The lines this runs on

Every row above came off a Singtel SIM in a dongle on a rack in Singapore. Not a datacenter range wearing an SG label. That is the entire reason the voucher prices and shipping fees are the ones a local actually gets.

We sell those lines. If you're building your own scraper and the Singapore part is what keeps breaking, dedicated SG mobile proxies are at singaporemobileproxy.com. Code APIFY15 takes 15% off your first payment.

Worth saying plainly: it's a line, not an unblocker. Shopee still blocks us on a clean SG mobile IP, because that one is app-layer fingerprinting and no proxy fixes it. Lazada works because it serves its listing JSON to an ordinary browser session.