World Market Product Scraper
Get product data from Cost Plus World Market, a US home decor, furniture, and specialty food retailer. Search by keyword or browse by department for price, brand, item number, category, images, availability, and ratings.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to fetch. `search` uses a keyword, `byCategory` browses a department or collection, and `byProductUrls` reads the URLs you paste. |
searchQuery | string | optional | Keyword to search for (mode=search), e.g. `candle`, `dining chair`, `chocolate`. |
category | string | optional | A World Market department or curated collection. Use `categoryUrl` instead if you want a sub-category that is not listed here. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to fetch. `search` uses a keyword, `byCategory` browses a department or collection, and `byProductUrls` reads the URLs you paste. |
searchQuery | string | optional | Keyword to search for (mode=search), e.g. `candle`, `dining chair`, `chocolate`. |
category | string | optional | A World Market department or curated collection. Use `categoryUrl` instead if you want a sub-category that is not listed here. |
categoryUrl | string | optional | A worldmarket.com category or collection URL, e.g. `https://www.worldmarket.com/c/furniture/shop-all-furniture/`. Takes priority over `category`. |
productUrls | array | optional | Direct worldmarket.com product-page URLs, e.g. `https://www.worldmarket.com/p/<slug>-<id>.html`. Up to 500 unique URLs per run. |
sortBy | string | optional | Sort order for search and department results. `bestselling` and `newArrivals` keep World Market's own listing order. |
minPrice | integer | optional | Drop products whose current price is below this amount. |
maxPrice | integer | optional | Drop products whose current price is above this amount. |
maxItems | integer | optional | Hard cap on emitted products (1–500). Search and department pages are read 120 tiles at a time. |
storeId | string | optional | A World Market store ID such as `store398`. Used only when `includePickup` is enabled. If omitted, the nearest store is resolved from `postalCode`. |
postalCode | string | optional | US ZIP code used to resolve the nearest store when `storeId` is not set and `includePickup` is enabled. |
includeVariants | boolean | optional | Include the selectable color, size or fragrance options for products that have them (up to 20). |
includePickup | boolean | optional | Add per-store pickup status, quantity and message. Requires `storeId` or `postalCode`. |
proxyConfiguration | object | optional | Optional. The actor connects directly first and only uses a proxy fallback if World Market blocks a request. Choose your own proxy to use it as that fallback, or leave it unset. |
Download the published input schema
View complete JSON
{
"description": "Search worldmarket.com by keyword, browse a department or collection, or paste product URLs. Prices, sale savings, images, SKUs, variants and optional store pickup. No login or cookies required.",
"properties": {
"category": {
"description": "A World Market department or curated collection. Use `categoryUrl` instead if you want a sub-category that is not listed here.",
"editor": "select",
"enum": [
"bestSellers",
"bath",
"clothingAndJewelry",
"decorAndPillows",
"dining",
"foodAndDrinks",
"freeShipping",
"furniture",
"gifts",
"holidays",
"kitchen",
"lighting",
"newAndTrending",
"outdoor",
"rugs",
"sale",
"wallDecorAndMirrors"
],
"enumTitles": [
"Best Sellers",
"Bath & Body",
"Clothing & Jewelry",
"Decor & Pillows",
"Dining",
"Food & Drinks",
"Free Shipping",
"Furniture",
"Gifts",
"Holidays",
"Kitchen",
"Lighting",
"New & Trending",
"Outdoor",
"Rugs",
"Sale / Clearance",
"Wall Decor & Mirrors"
],
"title": "Department or collection (mode=byCategory)",
"type": "string"
},
"categoryUrl": {
"description": "A worldmarket.com category or collection URL, e.g. `https://www.worldmarket.com/c/furniture/shop-all-furniture/`. Takes priority over `category`.",
"editor": "textfield",
"title": "Custom category or collection URL (mode=byCategory)",
"type": "string"
},
"includePickup": {
"default": false,
"description": "Add per-store pickup status, quantity and message. Requires `storeId` or `postalCode`.",
"prefill": false,
"title": "Include store pickup availability",
"type": "boolean"
},
"includeVariants": {
"default": true,
"description": "Include the selectable color, size or fragrance options for products that have them (up to 20).",
"prefill": true,
"title": "Include variant options",
"type": "boolean"
},
"maxItems": {
"default": 20,
"description": "Hard cap on emitted products (1–500). Search and department pages are read 120 tiles at a time.",
"maximum": 500,
"minimum": 1,
"prefill": 1,
"title": "Max items",
"type": "integer"
},
"maxPrice": {
"description": "Drop products whose current price is above this amount.",
"maximum": 100000,
"minimum": 0,
"title": "Maximum price (USD)",
"type": "integer"
},
"minPrice": {
"description": "Drop products whose current price is below this amount.",
"maximum": 100000,
"minimum": 0,
"title": "Minimum price (USD)",
"type": "integer"
},
"mode": {
"default": "search",
"description": "What to fetch. `search` uses a keyword, `byCategory` browses a department or collection, and `byProductUrls` reads the URLs you paste.",
"editor": "select",
"enum": [
"search",
"byCategory",
"byProductUrls"
],
"enumTitles": [
"Search by keyword",
"Browse a department or collection",
"Look up product URLs"
],
"prefill": "search",
"title": "Mode",
"type": "string"
},
"postalCode": {
"description": "US ZIP code used to resolve the nearest store when `storeId` is not set and `includePickup` is enabled.",
"editor": "textfield",
"title": "ZIP / postal code (optional, pickup only)",
"type": "string"
},
"productUrls": {
"default": [],
"description": "Direct worldmarket.com product-page URLs, e.g. `https://www.worldmarket.com/p/<slug>-<id>.html`. Up to 500 unique URLs per run.",
"editor": "stringList",
"title": "Product URLs (mode=byProductUrls)",
"type": "array"
},
"proxyConfiguration": {
"description": "Optional. The actor connects directly first and only uses a proxy fallback if World Market blocks a request. Choose your own proxy to use it as that fallback, or leave it unset.",
"editor": "proxy",
"sectionCaption": "Advanced",
"sectionDescription": "Proxy settings.",
"title": "Proxy configuration",
"type": "object"
},
"searchQuery": {
"default": "candle",
"description": "Keyword to search for (mode=search), e.g. `candle`, `dining chair`, `chocolate`.",
"editor": "textfield",
"prefill": "candle",
"title": "Search query",
"type": "string"
},
"sortBy": {
"default": "bestselling",
"description": "Sort order for search and department results. `bestselling` and `newArrivals` keep World Market's own listing order.",
"editor": "select",
"enum": [
"bestselling",
"newArrivals",
"ratingHighToLow",
"priceLowToHigh",
"priceHighToLow"
],
"enumTitles": [
"Bestselling",
"New Arrivals",
"Rating: High to Low",
"Price: Low to High",
"Price: High to Low"
],
"title": "Sort order",
"type": "string"
},
"storeId": {
"description": "A World Market store ID such as `store398`. Used only when `includePickup` is enabled. If omitted, the nearest store is resolved from `postalCode`.",
"editor": "textfield",
"title": "Store ID (optional, pickup only)",
"type": "string"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "World Market Product Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
products | string | optional | Dataset containing all scraped World Market products. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "World Market products with exact current price, original price and discount, sale badges, brand, SKU and master ID, rating, images, variants, category, availability and optional store pickup status.",
"properties": {
"products": {
"description": "Dataset containing all scraped World Market products.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "World Market products",
"type": "string"
}
},
"title": "World Market Product Scraper Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"overview": {
"display": {
"component": "table",
"properties": {}
},
"title": "Products",
"transformation": {
"fields": [
"title",
"price",
"originalPrice",
"saleBadge",
"brand",
"sku",
"availability",
"pickupStatus",
"rating",
"reviewCount",
"productUrl"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
World Market Product Prices, Sale & Store Pickup Scraper
Scrape Cost Plus World Market (worldmarket.com) for the exact lowest current price, original price and sale savings, brand, SKU, rating, image gallery, variant options and optional per-store pickup status. Search by keyword, browse a department or collection, or paste product URLs. No login, cookies or account is required.
What this actor does
- Three modes:
search(keyword),byCategory(department or collection),byProductUrls(direct product pages) - Accurate sale pricing: reads the tile's list and sale price blocks, so a sale range such as
$4.00–$34.99returnsprice: 4.00,priceMax: 34.99andoriginalPrice: 4.99instead of the highest value - Sale and clearance detail:
onSale,saleBadge,discountAmount,discountPercentand product badges such as Sale, Clearance, New, Best Seller and Top Rated - Rich product data: brand or sub-brand, full category path, description, rating and review count, up to 10 images, master ID, selected SKU, all SKUs and up to 20 variant options
- Optional store pickup: add
storeIdorpostalCodewithincludePickupto getavailable,delayedoroutpickup status, quantity and message for each product - Canonical dedupe: collection tiles and individual product tiles that share a master product are emitted once, preferring the individual product URL
- Caps for predictable runs: 500 products, 120 tiles per listing page, 6 parallel detail requests, 10 images, 20 variant options and 500 product URLs
- Empty fields are omitted — every record only contains fields that were actually found
Output per product
title— product namebrand— sub-brand when World Market lists one (e.g.Apothecary), otherwiseWorld Marketdescription— product descriptioncategory— full breadcrumb path (e.g.Furniture > Dining Room Furniture > Dining Chairs)masterId— World Market master product ID used for canonical dedupesku— selected SKU for this product recordskus[]— all SKUs that belong to the master product (up to 50)itemNumber— the selected SKU, kept for compatibility with older datasetsprice— exact lowest current price in USDpriceMax— highest price when the product or its variants span a price rangeoriginalPrice— list price before the sale, only when the product is discounteddiscountAmount,discountPercent— savings versusoriginalPrice, only when discountedcurrency—USDonSale—truewhen the product is discounted or flagged as a sale itemsaleBadge—SaleorClearancewhen applicablebadges[]— other merchandising badges (New, Best Seller, Top Rated)rating— average customer rating (1–5), only when the product has reviewsreviewCount— number of customer reviews, only when the product has reviewsimageUrls[]— up to 10 product imagesimageCount— number of images returnedavailability—In StockorOut of StockinStock— boolean availabilityvariants[]— selectable options (up to 20), each withattribute,labelandselectedwhen applicablevariantCount— number of SKUs or options when the product has more than oneproductUrl— canonical World Market product URLstoreId,storeName— resolved store, only when pickup is enabledpickupAvailable—truewhen the item can be picked up at the resolved storepickupStatus—available,delayedoroutpickupMessage— the site's pickup message (e.g.Available todayorAvailable Nov 3 - 13 at)storeQty— store inventory quantity when pickup is enabledrecordType: "product",scrapedAt— UTC ISO timestamp
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | search |
search / byCategory / byProductUrls |
searchQuery |
string | candle |
Keyword to search for (mode=search) |
category |
string | – | Department or collection to browse (mode=byCategory) |
categoryUrl |
string | – | Custom worldmarket.com category or collection URL (mode=byCategory); takes priority over category |
productUrls |
array | – | Direct product URLs (mode=byProductUrls); up to 500 unique URLs |
sortBy |
string | bestselling |
bestselling / newArrivals / ratingHighToLow / priceLowToHigh / priceHighToLow |
minPrice |
int | – | Drop products below this current price (USD) |
maxPrice |
int | – | Drop products above this current price (USD) |
maxItems |
int | 20 |
Hard cap on emitted products (1–500) |
storeId |
string | – | Store ID such as store398 (pickup only) |
postalCode |
string | – | US ZIP code used to resolve the nearest store (pickup only) |
includeVariants |
boolean | true |
Include selectable variant options |
includePickup |
boolean | false |
Add per-store pickup availability; requires storeId or postalCode |
proxyConfiguration |
object | – | Optional proxy fallback; the actor connects directly first |
category accepts: bestSellers, bath, clothingAndJewelry, decorAndPillows, dining, foodAndDrinks, freeShipping, furniture, gifts, holidays, kitchen, lighting, newAndTrending, outdoor, rugs, sale, wallDecorAndMirrors.
Example: keyword search with sale prices
{
"mode": "search",
"searchQuery": "candle",
"sortBy": "priceLowToHigh",
"maxItems": 50
}
Example: browse a department with a price range
{
"mode": "byCategory",
"category": "furniture",
"sortBy": "priceLowToHigh",
"minPrice": 100,
"maxPrice": 500,
"maxItems": 100
}
Example: custom collection URL
{
"mode": "byCategory",
"categoryUrl": "https://www.worldmarket.com/c/sale/clearance/shop-all-clearance/",
"maxItems": 60
}
Example: direct product URLs with store pickup
{
"mode": "byProductUrls",
"productUrls": [
"https://www.worldmarket.com/p/apothecary-lavender-tonic-scented-candle-128547.html",
"https://www.worldmarket.com/p/apothecary-holiday-mini-scented-candle-133564.html"
],
"includePickup": true,
"storeId": "store398"
}
Use cases
- Price monitoring — track current and original prices, sale windows and clearance items over time
- Promotion intelligence — quantify discount depth by department, brand or collection
- Catalog enrichment — feed structured product, image, SKU and variant data into a PIM or storefront
- Local availability checks — see which products are available today, delayed or out of stock for pickup at a chosen store
- Gift and seasonal research — collect holiday, food, decor and best-seller assortments for content or merchandising
- Affiliate and comparison sites — build up-to-date product pages with verified prices and images
Limitations
- Prices are shown in USD and pickup covers US World Market stores.
- Search and department runs stop at 500 products. For a larger catalog, split by department, collection or keyword.
- Product URLs are capped at 500 per run; only the first
maxItemsunique URLs are fetched. originalPrice,discountAmountanddiscountPercentappear only when World Market shows a higher list price.ratingandreviewCountare omitted for products with no reviews.- Pickup status is a snapshot for one store at run time. It needs a valid
storeIdor a US ZIP code. - worldmarket.com runs on Salesforce Commerce Cloud behind Cloudflare. If the site changes its page structure or blocks traffic, the actor retries and switches connection, and fails with a clear error instead of returning partial or invented data.
FAQ
Is this affiliated with World Market or Cost Plus World Market? No. This is an independent, third-party actor that reads the same public product pages any shopper sees. It is not affiliated with, endorsed by or connected to World Market.
Do I need to log in or provide cookies? No. World Market publishes prices, availability and product details on public pages without an account.
How is price chosen when a product has several sizes or a sale range?
price is the lowest current price shown for the product. When a sale tile shows a range, the lowest sale value is used, and priceMax records the highest value. This avoids the common mistake of returning the highest price in a range.
Why do only some products have an originalPrice?
Only discounted products show a higher list price. Products at their regular price omit originalPrice, discountAmount and discountPercent rather than repeating the current price.
Why are rating and reviewCount missing on some products?
Those fields are only included when a product has at least one customer review. New or niche items may not have reviews yet, so the fields are omitted instead of showing a fake zero.
How do I get pickup availability?
Set includePickup to true and provide either a storeId (for example store398) or a US postalCode. The actor resolves the store, then reports pickupStatus, pickupMessage, storeQty, storeId and storeName for each product. Without a store or ZIP, pickup is skipped.
What do the pickup statuses mean?
available means the item can be picked up today. delayed means pickup is possible but the site shows a later date range. out means the item is not available for pickup at that store.
How many products can I scrape in one run?
Up to 500 via maxItems, read 120 tiles at a time. For larger catalogs, split the work by department, collection or keyword. Direct URL mode accepts up to 500 unique URLs and fetches the first maxItems of them.
Does byCategory cover every sub-category?
The dropdown covers 17 top-level departments and curated collections. For a narrower slice, paste its URL into categoryUrl or use a keyword search.
Are variant prices included for every option?
variants[] lists the selectable options and which one is selected. price and priceMax describe the product's price range, and skus[] lists all SKUs. Per-option prices are not invented when the site does not show them on the product summary.
How fresh is the data? Every run reads live World Market pages. There is no cached catalog, so prices, sale badges and pickup status reflect the moment of the run.
Do I need to set up a proxy? No. The actor connects directly first and only uses a proxy fallback if World Market blocks a request. You can optionally choose your own proxy in the advanced settings.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build Z35VNzyO9WZcnVPjc. Documentation is regenerated from the default published build; private drafts are not included.