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

Scrape Blinkit search results for any Indian delivery location: product names, brands, prices, MRP, discounts, stock, delivery ETA, ratings and images. No login needed.
Scrape Blinkit search results exactly as shoppers see them in any Indian neighbourhood: product names, brands, prices, MRP, discounts, stock, delivery ETA, ratings and images. Type a few keywords and delivery locations, and get clean rows in seconds. No login, no app, and you pay only for the products you save.
milk, chocolate, atta 5kg.Koramangala, Bengaluru, 400053 or 28.5247, 77.1554.| Field | What it does |
|---|---|
searchQueries | Keywords to search, one per line. Each is searched in every location. |
locations | Area and city, 6-digit PIN code, or latitude, longitude. Empty: Connaught Place, New Delhi. |
maxItems | Products to save per keyword and location. 0 = all. |
startUrls | Optional Blinkit search URLs such as https://blinkit.com/s/?q=paneer. |
onlyInStock, excludeSponsored | Skip sold-out products or ads. |
minPrice, maxPrice, minDiscountPercent | Price range in rupees and minimum discount off MRP. |
includeRelatedProducts | Also save the "related products" Blinkit shows after the direct matches. |
{
"searchQueries": ["Chocolate", "milk"],
"locations": ["Vasant Kunj, New Delhi", "Koramangala, Bengaluru"],
"maxItems": 20,
"onlyInStock": true
}
One row per product, keyword and location.
| Field | Description |
|---|---|
name, brand, variant | Product name, brand and pack size |
price, mrp, discount_percent, offer_text | Selling price and MRP in rupees, discount and offer label |
out_of_stock, inventory, max_order_quantity | Stock at the serving store and the order limit |
eta_in_minutes | Delivery time from the store that ships the product |
rating_value, rating_count | Average rating and number of ratings |
is_sponsored, is_related, position | Ad flag, related-product flag and rank in the results |
product_id, product_url, group_id, product_type | Blinkit IDs, product page and product type |
image_url, images, other_variants | Main image, all images and the other pack sizes with their prices |
merchant_id, merchant_type | The dark store that serves the location |
location, city, pincode, latitude, longitude | Where the search was made |
search_keyword, location_query, timestamp | The input that produced the row and when it was scraped |
Example row from a test run (image list shortened):
{
"search_keyword": "Chocolate",
"position": 2,
"product_id": "212722",
"product_url": "https://blinkit.com/prn/nestle-kitkat-4-fingers-choco-coated-wafer-bar/prid/212722",
"name": "Nestle KitKat 4 Fingers Choco Coated Wafer Bar",
"variant": "38.5 g",
"brand": "Nestle KitKat",
"product_type": "Wafer Chocolate",
"price": 30,
"mrp": 30,
"discount_percent": null,
"offer_text": null,
"currency": "INR",
"out_of_stock": false,
"product_state": "available",
"inventory": 50,
"max_order_quantity": 50,
"eta_in_minutes": 11,
"rating_value": 4.7,
"rating_count": 570000,
"is_sponsored": false,
"is_related": false,
"merchant_id": "30474",
"merchant_type": "express",
"group_id": "2193415",
"image_url": "https://cdn.grofers.com/da/cms-assets/cms/product/dce27cb9-f7c0-49b8-9721-7c8eaa142a86.png",
"images": [
"https://cdn.grofers.com/da/cms-assets/cms/product/dce27cb9-f7c0-49b8-9721-7c8eaa142a86.png",
"https://cdn.grofers.com/da/cms-assets/cms/product/1b36b171-0315-43d8-9e0b-89190c6855c4.png"
],
"other_variants": [
{"product_id": "229144", "variant": "2 x 38.5 g", "price": 57, "mrp": 60, "out_of_stock": false, "inventory": 50},
{"product_id": "372216", "variant": "3 x 38.5 g", "price": 84, "mrp": 90, "out_of_stock": false, "inventory": 10}
],
"location": "Vasant Kunj",
"location_query": "Vasant Kunj, New Delhi",
"city": "New Delhi",
"pincode": "110070",
"latitude": 28.5247418,
"longitude": 77.1554539,
"timestamp": "2026-10-21T15:13:38.954Z"
}
A run summary (products per search, resolved locations, skipped locations) is saved as OUTPUT in the run's key-value store.
You pay $3.00 per 1,000 products saved ($0.003 per product), plus the platform usage of the run.
Is it legal to scrape Blinkit? The actor only reads public search results that anyone can see on blinkit.com without an account. It does not log in or touch personal data. Check Blinkit's terms and your local laws for how you use the data.
Do I need a Blinkit account or my own proxy? No. Blinkit only answers visitors from India, so the actor uses residential proxies in India by default. You can switch to your own proxies in the Proxy section.
How many products can I get? Blinkit shows every direct match for a keyword (from a handful up to several hundred, e.g. about 550 for "chocolate" in Vasant Kunj). With "Include related products" on, the actor keeps going into Blinkit's related products.
Why are prices or stock different between locations? Blinkit serves each neighbourhood from its nearest dark store. Prices, offers, stock and delivery times are those of that store, which is why you can search the same keyword in many locations in one run.
What if a field is empty?
Fields are empty when Blinkit does not show them for that product, e.g. offer_text and discount_percent when a product is sold at MRP.
Can I schedule it or use the API? Yes. Save a task and schedule it (for example every morning), or start runs and read the dataset through the API in JSON, CSV or Excel.
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 queries
Products to search for on Blinkit, one per line, e.g. 'milk', 'dark chocolate', 'atta 5kg'. Each query is searched separately in every location.
locationsarrayOptionalDelivery locations
Where Blinkit should deliver: an area and city ('Koramangala, Bengaluru'), a 6-digit PIN code ('110070') or 'latitude, longitude' ('19.1364, 72.8296'). Prices, stock and delivery times depend on the store that serves the location. Every query is searched in every location. Empty: Connaught Place, New Delhi.
maxItemsintegerOptionaldefault 20Max products per search
How many products to save for each query in each location. 0 saves every product Blinkit returns for the search.
startUrlsarrayOptionalBlinkit search URLs
Optional. Blinkit search page URLs such as https://blinkit.com/s/?q=paneer. The keyword is taken from the URL.
onlyInStockbooleanOptionaldefault falseOnly in-stock products
Skip products that are sold out at the store serving the location.
excludeSponsoredbooleanOptionaldefault falseExclude sponsored products
Skip products Blinkit shows as ads (AD badge).
minPriceintegerOptionalMin price (₹)
Only save products whose selling price is at least this many rupees.
maxPriceintegerOptionalMax price (₹)
Only save products whose selling price is at most this many rupees.
minDiscountPercentintegerOptionalMin discount (%)
Only save products discounted by at least this percentage off MRP.
includeRelatedProductsbooleanOptionaldefault falseInclude related products
After the direct matches, Blinkit shows 'related products' (similar items). Turn this on to keep scraping them; they are marked with is_related = true.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Blinkit only answers from India, so residential proxies in India are the default.
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 |
|---|---|---|
| search_keyword | string | null | Search keyword |
| position | number | null | Rank in the search results (1 = first) |
| product_id | string | null | Blinkit product ID |
| product_url | string | null | Product page URL |
| name | string | null | Product name |
| variant | string | null | Pack size or variant as shown (e.g. 500 ml) |
| brand | string | null | Brand |
| product_type | string | null | Product type (e.g. Full Cream Milk) |
| price | number | null | Selling price in rupees |
| mrp | number | null | MRP in rupees |
| discount_percent | number | null | Discount % off MRP |
| offer_text | string | null | Offer label as shown (e.g. 11% OFF) |
| currency | string | null | Currency (INR) |
| out_of_stock | boolean | null | Sold out at the store |
| product_state | string | null | Availability state from Blinkit |
| inventory | number | null | Units available to add to the cart |
| max_order_quantity | number | null | Most units one order can hold |
| eta_in_minutes | number | null | Delivery time in minutes from the serving store |
| rating_value | number | null | Average rating (out of 5) |
| rating_count | number | null | Number of ratings |
| is_sponsored | boolean | null | Shown as an ad |
| is_related | boolean | null | A related product shown after the direct matches |
| merchant_id | string | null | Store (dark store) ID |
| merchant_type | string | null | Store type (e.g. express) |
| group_id | string | null | Product group shared by all pack sizes |
| image_url | string | null | Main product image |
| images | array | null | All product images |
| other_variants | array | null | Other pack sizes: product_id, variant, price, mrp, out_of_stock, inventory |
| location | string | null | Delivery locality |
| location_query | string | null | Location as entered |
| city | string | null | City |
| pincode | string | null | PIN code of the location |
| latitude | number | null | Delivery latitude |
| longitude | number | null | Delivery longitude |
| timestamp | string | null | When the product was 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 Blinkit product saved to the dataset. | $0.003 |
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/blinkit-scraper').call({
"searchQueries": [
"Chocolate"
],
"locations": [
"Vasant Kunj, New Delhi"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
],
"scrapelyProxyCountry": "IN"
}
})
// 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/blinkit-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/blinkit-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.
Prices, stock and delivery time from the store serving a PIN code; sold-out products skipped.
One keyword searched in two delivery locations in one run.
Price range, at least 5% off MRP, sponsored listings skipped.
Direct matches first, then the related products Blinkit suggests.
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.