
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Scrape Swiggy Instamart grocery products by keyword, category or collection: name, brand, pack size, price, MRP, discount, stock, rating, category and images for 15 Indian cities and any area. No login needed.
Get Swiggy Instamart grocery products with live prices, MRP, discounts, stock and ratings for the exact city or neighbourhood you choose. Search by keyword, sweep whole category aisles or collections, and export clean rows to JSON, CSV or Excel. No login, no cookies and no proxy setup needed.
Amul Milk, Sunscreen, Atta), and/or paste category or collection URLs from swiggy.com/instamart.| Field | What it does |
|---|---|
searchQueries | Search terms, one per line. Each is searched separately. |
categoryUrls | Category (/instamart/category-listing?..., /instamart/c/..., /instamart/sc/...), collection (/instamart/collection-listing?collectionId=...) or search URLs, or a category name. |
maxResults | Products to save per search term or URL. 0 = all. |
onlyInStock, excludeAds | Skip sold-out or sponsored products. |
minPrice, maxPrice, minDiscountPercent | Price range in ₹ and minimum discount off MRP. |
sortBy | relevance, priceLowToHigh, priceHighToLow or discountHighToLow. |
city, area, coordinates | Delivery location. Coordinates override city and area. |
{
"searchQueries": ["Amul Milk", "Olive Oil"],
"categoryUrls": ["https://www.swiggy.com/instamart/category-listing?categoryName=Fresh+Vegetables&taxonomyType=Speciality+taxonomy+1"],
"maxResults": 50,
"city": "Mumbai",
"area": "Andheri West",
"onlyInStock": true
}
One row per product. The main fields:
| Field | Description |
|---|---|
productId, skuId, parentProductId | Instamart ids of the product, the listed pack and the product family |
name, brand, quantity | Product name, brand and pack size |
price, mrp, savings, discount, discountPercent, pricePerUnit | Prices in ₹ |
rating, ratingCount | Average rating and number of ratings |
inStock, maxOrderQuantity | Availability at this location and the per-order limit |
isAd, adTitle | Sponsored result and the keyword the ad was bought for |
category, subCategory, superCategory, shortDescription | Catalogue placement and short description |
imageUrl, images, productUrl | Main image, all images and the product page |
variants, variantCount | Every pack size with its own price, MRP, discount and stock |
storeId, city, area, position | Store that served the location, location and rank in the list |
sourceType, sourceQuery, sourceCategoryUrl, sourceCategory, sourceSubcategory | Where the row came from |
Example row from a test run (Bengaluru, search "Amul Milk", lists trimmed):
{
"recordType": "product",
"productId": "71KUIARPTF",
"skuId": "IRXNSDGRBY",
"name": "Amul Gold Pasteurised Full Cream Milk",
"brand": "Amul",
"quantity": "500 ml",
"price": 33,
"mrp": 34,
"savings": 1,
"discount": "2% OFF",
"discountPercent": 2,
"pricePerUnit": "₹6.6/100 ml",
"currency": "INR",
"rating": 4.5,
"ratingCount": 516500,
"inStock": true,
"isAd": false,
"category": "Milk",
"subCategory": "Fresh Milk",
"superCategory": "Dairy, Bread and Eggs",
"shortDescription": "Rich and creamy full-fat milk",
"maxOrderQuantity": 12,
"imageUrl": "https://instamart-media-assets.swiggy.com/swiggy/image/upload/NI_CATALOG/IMAGES/ciw/2025/12/17/51a2cd89-2a42-4b2b-ac97-95288e02952d_TYF3262KU8_MN_16122025.png",
"variants": [
{"skuId": "HSVGNF0BL8", "quantity": "500 ml x 4", "price": 132, "mrp": 136, "discount": "2% OFF", "pricePerUnit": "₹6.6/100 ml", "inStock": true},
{"skuId": "IRXNSDGRBY", "quantity": "500 ml", "price": 33, "mrp": 34, "discount": "2% OFF", "pricePerUnit": "₹6.6/100 ml", "inStock": true}
],
"variantCount": 2,
"productUrl": "https://www.swiggy.com/instamart/item/71KUIARPTF",
"storeId": "1313712",
"position": 3,
"city": "Bangalore",
"sourceType": "search",
"sourceQuery": "Amul Milk",
"scrapedAt": "2026-10-21T11:46:04Z"
}
The run also writes a summary (OUTPUT in the key-value store): products per input, how many products Swiggy reports for each search, the location and store used, and any input that failed.
You pay $3.50 per 1,000 products saved ($0.0035 per product), plus the platform usage of the run (compute and the hosted browser), which is shown on every run.
Products removed by your filters are not charged, and a run never charges more than the maximum cost you set.
Is it legal to scrape Swiggy Instamart? The actor reads public catalogue data (products and prices) that anyone can see without an account. It collects no personal data. Check the site's terms and your local laws for your use case.
Do I need a Swiggy account, cookies or a proxy? No. The actor opens its own short browser session in India and needs nothing from you.
How many products can I get? As many as Swiggy lists for a search or category at that location. A broad search usually has 100 to 400 products; a full category such as Chips and Namkeens had about 1,600 in Bengaluru.
Why is a field empty?
Swiggy does not show it for that product: fresh produce often has no rating, many items have no discount or per-unit price, and adTitle is only set on sponsored rows.
Why do prices differ from what I see? Prices and stock depend on the store that serves the delivery point. Set the same city and area (or coordinates) you use in the app.
Can I schedule it or use the API? Yes. Save your input as a task, schedule it (for example every morning), and read the dataset through the API or an integration.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
searchQueriesarrayOptionalSearch terms
Products to search for, one per line, for example "Amul Milk", "Sunscreen", "Olive Oil" or "Eggs". Each term is searched separately. Leave empty if you only paste category URLs below.
categoryUrlsarrayOptionalCategory, collection or search URLs
Swiggy Instamart page URLs copied from your browser: category pages (https://www.swiggy.com/instamart/category-listing?categoryName=Fresh+Vegetables&taxonomyType=Speciality+taxonomy+1, or the short /instamart/c/... and /instamart/sc/... links), collection pages (/instamart/collection-listing?collectionId=...) or search pages (/instamart/search?query=...). You can also type a category name such as "Fresh Vegetables" or "Chips and Namkeens". A category URL collects every sub-category unless the URL points to one.
maxResultsintegerOptionaldefault 20Max products per search or category
Maximum number of products to save for each search term and each URL. 0 = all products. You pay per saved product.
Narrow the products down. Filters apply before saving, so you only pay for products that pass.
onlyInStockbooleanOptionaldefault falseOnly in-stock products
Skip products that are sold out at the chosen location.
excludeAdsbooleanOptionaldefault falseSkip sponsored products
Skip products marked "Ad" in the search results.
minPriceintegerOptionalMin price (₹)
Only products whose selling price is at least this amount.
maxPriceintegerOptionalMax price (₹)
Only products whose selling price is at most this amount.
minDiscountPercentintegerOptionalMin discount (%)
Only products discounted by at least this percentage off MRP.
sortByenumOptionaldefault "relevance"Sort by
Order in which Swiggy Instamart returns the products. Sponsored products may still appear first.
Prices, discounts and stock on Swiggy Instamart differ by delivery location.
cityenumOptionaldefault "Bangalore"City
The city whose Instamart store sets availability and prices.
areastringOptionalArea or neighbourhood
Optional. An area inside the city, for example "Koramangala" or "Andheri West", to get the prices and stock of the store that serves that exact spot. Leave empty for the city centre.
coordinatesstringOptionalExact coordinates
Optional. A delivery point as "latitude, longitude", for example "12.9352, 77.6245". Overrides the city and area.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| recordType | string | null | Always "product" |
| productId | string | null | Swiggy Instamart product id |
| skuId | string | null | Id of the listed pack size |
| parentProductId | string | null | Id of the product family |
| name | string | null | Product name |
| brand | string | null | Brand |
| quantity | string | null | Pack size, e.g. "500 ml" |
| price | number | null | Selling price in ₹ |
| mrp | number | null | Maximum retail price in ₹ |
| savings | number | null | MRP minus selling price in ₹ |
| discount | string | null | Discount label as shown, e.g. "10% OFF" |
| discountPercent | number | null | Discount off MRP in % |
| pricePerUnit | string | null | Price per unit when shown, e.g. "₹5.4/100 ml" |
| currency | string | null | Always INR |
| rating | number | null | Average rating (1-5) |
| ratingCount | number | null | Number of ratings |
| inStock | boolean | null | Can be ordered now at this location |
| isAd | boolean | null | Sponsored result |
| adTitle | string | null | Keyword the ad was bought for |
| category | string | null | Category |
| subCategory | string | null | Sub-category |
| superCategory | string | null | Top-level category |
| shortDescription | string | null | Short description |
| maxOrderQuantity | number | null | Max units per order |
| weightInGrams | number | null | Weight in grams |
| imageUrl | string | null | Main image URL |
| images | array | null | All image URLs |
| variants | array | null | All pack sizes with price, MRP and stock |
| variantCount | number | null | Number of pack sizes |
| productUrl | string | null | Product page URL |
| storeId | string | null | Instamart store (pod) id that serves the location |
| position | number | null | Rank within the search or category (1 = first) |
| city | string | null | City |
| area | string | null | Area or coordinates when given |
| sourceType | string | null | search, category or collection |
| sourceQuery | string | null | Search term |
| sourceCategoryUrl | string | null | Input URL |
| sourceCategory | string | null | Category name |
| sourceSubcategory | string | null | Sub-category name |
| scrapedAt | string | null | Time scraped (UTC) |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Product | One Swiggy Instamart product saved to the dataset. | $0.0035 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/swiggy-scraper').call({
"searchQueries": [
"Amul Milk"
],
"maxResults": 20
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/swiggy-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/swiggy-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Keyword search with Mumbai prices and stock
In stock, no ads, at least 5% off MRP
Paste a category page URL
Area-level prices and stock
A short category link and a typed category name, 5 products each
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.