Instacart public retailer boundary scraper avatar

Instacart public retailer boundary scraper

Pricing

from $2.99 / 1,000 retailers

Go to Apify Store
Instacart public retailer boundary scraper

Instacart public retailer boundary scraper

Extract bounded public Instacart retailer-directory records with explicit source-access diagnostics.

Pricing

from $2.99 / 1,000 retailers

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Share

Instacart Retailers Scraper

Target and scope

This Actor extracts bounded, source-backed retailer records from official public Instacart storefront or retailer pages. It reads public server-rendered retailer state when available, then falls back to retailer JSON-LD and official /store/ links from the same page. It does not log in, use private APIs, solve CAPTCHAs, use stealth, or infer retailers from an access-barrier page.

A browser may show a login modal or a security-verification page while an unauthenticated request exposes no retailer data. Those outcomes are preserved as minimal diagnostics and an OUTPUT summary. The Actor never fabricates a retailer, address, phone number, rating, or store URL.

Use cases

  • Inventory public retailer identity and metadata visible on Instacart storefront pages.
  • Build a small public retailer directory with names, URLs, categories, hours, ratings, and contact fields when exposed.
  • Run a scheduled source-access check that distinguishes usable data from login or security barriers.
  • Inspect several official public Instacart pages with one bounded run.

Cost

Apify platform compute, storage, and any explicitly enabled proxy traffic are billed according to your Apify plan. This Actor has no separate service fee. Keep the source count, maxItems, response size, retries, and proxy use bounded to control run time and spend.

How to use

  1. Enter one official HTTPS Instacart page in startUrl, or leave it empty and provide startUrls.
  2. Set the global retailer limit and bounded request controls.
  3. Run the Actor and inspect normal rows, diagnostics, and the OUTPUT key-value record.

startUrl takes precedence over startUrls and the compatibility alias url. For multi-source mode, set startUrl to an empty string. The Actor performs one bounded request per source page; it does not guess pagination because a verified public directory pagination contract is not assumed. Storefront identity is accepted only from source-backed state on the same official page.

Input

The input schema is the source of truth. All limits below are enforced by the schema and bounded again by the runtime.

FieldType and defaultBounds and behavior
startUrlstring, https://www.instacart.com/store/kents-market/storefrontPrimary official HTTPS Instacart storefront or retailer page; maximum 2,000 characters. Takes precedence over the other source fields.
startUrlsarray, emptyCompatibility list of { "url": "https://..." } objects, used when startUrl is empty. Duplicate normalized URLs are removed.
urlstring, emptySingle official HTTPS URL compatibility alias, used when startUrl and startUrls are empty.
timeoutSecsinteger, 30Per-request timeout, from 5 through 120 seconds.
maxBytesinteger, 5000000Maximum retained response size, from 100,000 through 5,000,000 bytes.
maxItemsinteger, 50Global normal retailer-row limit, from 1 through 100. Diagnostics do not consume the limit.
requestDelayMsinteger, 0Delay before retries or redirects, from 0 through 10,000 ms.
maxRequestRetriesinteger, 1Retries only timeouts, transport failures, and HTTP 5xx responses; from 0 through 2. Access barriers are not bypassed.
userAgentstring, transparent defaultOptional user-agent without control characters; maximum 300 characters.
proxyConfigurationobject, directOptional { "useApifyProxy": true, "apifyProxyGroups": [], "apifyProxyCountry": "US" }. At most five non-empty groups; country is an optional two-letter code. Proxy use is explicit and does not bypass access controls.

Runnable single-source input

{
"startUrl": "https://www.instacart.com/store/kents-market/storefront",
"maxItems": 10,
"timeoutSecs": 30,
"maxRequestRetries": 1,
"proxyConfiguration": { "useApifyProxy": true }
}

Runnable multi-source input

{
"startUrl": "",
"startUrls": [
{ "url": "https://www.instacart.com/store" },
{ "url": "https://www.instacart.com/store/kents-market/storefront" },
{ "url": "https://www.instacart.com/store/sprouts/storefront" }
],
"maxItems": 10,
"timeoutSecs": 30,
"maxBytes": 5000000,
"requestDelayMs": 500,
"maxRequestRetries": 1,
"proxyConfiguration": { "useApifyProxy": true }
}

Output

The default dataset contains only source-backed instacart-retailer rows. Access diagnostics and run summaries are stored in the OUTPUT key-value-store entry and logs. If a run saves retailers before a later request or output problem, the Actor run succeeds and reports dataStatus: PARTIAL. A clean empty result succeeds with dataStatus: NO_RESULTS. If a real failure occurs before any retailer is saved, the Actor run reports status: FAILED and dataStatus: FAILED; diagnostics are never added to the dataset.

Normal retailer record

{
"recordType": "instacart-retailer",
"recordId": "retailer_0123456789abcdef0123",
"source": "Instacart",
"url": "https://www.instacart.com/store/kents-market/storefront",
"sourceUrl": "https://www.instacart.com/store/kents-market/storefront",
"retailerUrl": "https://www.instacart.com/store/example/storefront",
"retailerId": "2686",
"retailerName": "Example Market",
"description": "Fresh grocery delivery and pickup.",
"category": "Grocery - Traditional",
"address": "10 Main Street, New York, NY, 10001",
"addressDetails": {
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10001"
},
"phoneNumber": "+1 212 555 0199",
"phoneNumbers": ["+1 212 555 0199"],
"websiteUrl": "https://example.com/market",
"openingHours": ["Mo-Su 08:00-20:00"],
"geo": { "latitude": 40.7128, "longitude": -74.006 },
"imageUrls": ["https://www.instacart.com/assets/store.jpg"],
"rating": 4.5,
"reviewCount": 120,
"position": 1,
"scrapedAt": "2026-09-08T00:00:00.000Z"
}

When richer retailer state and JSON-LD are absent, an official /store/ link on the bounded page can still produce a normal identity row. Fields not exposed by the link are omitted.

{
"recordType": "instacart-retailer",
"recordId": "retailer_89ab",
"source": "Instacart",
"url": "https://www.instacart.com/store",
"sourceUrl": "https://www.instacart.com/store",
"retailerUrl": "https://www.instacart.com/store/fresh-market",
"retailerName": "Fresh Market",
"position": 1,
"scrapedAt": "2026-09-08T00:00:00.000Z"
}

OUTPUT summary

{
"status": "SUCCEEDED",
"runStatus": "SUCCEEDED",
"dataStatus": "PARTIAL",
"source": "Instacart",
"actor": "instacart-retailers-scraper",
"targetCount": 3,
"itemCount": 2,
"retailerCount": 2,
"diagnosticCount": 1,
"blockedCount": 1,
"optionalFailureCount": 0,
"dataAvailable": true,
"sourceTransport": "apify_proxy",
"fixture": false,
"requestCount": 3,
"generatedBy": "OpenAI Codex with GPT-6",
"completedAt": "2026-09-08T00:00:00.000Z"
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Advanced options and troubleshooting

Use one source and a small maxItems for a smoke test. Multiple source pages, redirects, retries, larger response limits, and media arrays increase compute and request time. Missing contact details, hours, ratings, images, or descriptions are expected when the public page does not expose them.

  • LOGIN_REDIRECT or BLOCKED: the page did not expose retailer records to this unauthenticated run; no bypass was attempted.
  • NO_PUBLIC_RETAILER_DATA: the response was usable but contained no stable public retailer state, JSON-LD, or official store link.
  • HTTP_ERROR, TIMEOUT, or REQUEST_FAILED: inspect the URL, timeout, retry count, and run logs.
  • INVALID_INPUT or INVALID_PROXY: correct the input shape; unsupported fields are reported rather than silently used.

API, support, and Issues

Use the Apify API or Console dataset endpoint to read normal rows and the default key-value store OUTPUT record. When reporting an issue, include the Actor version, run ID, input mode, error code, and a short description. Do not include private customer information or credentials.

This Actor is not affiliated with, sponsored by, or endorsed by Instacart. It is intended for public, source-backed business data only. Follow Instacart's terms, robots guidance, rate limits, privacy rules, and applicable law. Public business pages can still contain personal data; use it lawfully. Do not log in, collect private customer data, evade security controls, or infer fields that the public source did not expose.