Instagram Shop Scraper · Products, Prices & Emails · No Login avatar

Instagram Shop Scraper · Products, Prices & Emails · No Login

Pricing

from $1.40 / 1,000 products

Go to Apify Store
Instagram Shop Scraper · Products, Prices & Emails · No Login

Instagram Shop Scraper · Products, Prices & Emails · No Login

Scrape any Instagram Shop by handle. Get every product with its price, sale price and discount, image and buy link, plus the merchant card behind the shop — business address, contact email, phone and website. No login, no cookies. JSON, CSV, Excel.

Pricing

from $1.40 / 1,000 products

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Instagram Shop Scraper

Scrape any brand's Instagram Shop by handle.

Get every product with its price, sale price and discount, the image, and the link that actually sells it — plus the merchant card behind the shop: business address, contact email, phone and website. No login, no cookies, no account risk.

Feed it fashionnova and get 33 products and the shop's contact email in one run.


Why Use This Scraper?

  • The products Instagram shows on the shop tab — title, current price, full price, image, buy link
  • Discounts already worked out — isDiscounted and discountPercent computed from the two prices, so a price-drop filter is one click
  • Merchant contact data — business address, contact email, phone, website and privacy-policy URL from Instagram's own "About this shop" panel
  • Multi-currency — prices come back in the shop's own currency with the symbol split into its own field
  • Accounts without a shop cost you nothing — Instagram's own shop flag is checked first, so a handle with no shop returns one labelled row instead of burning requests
  • Products deduplicated across collections before they are delivered or charged
  • Many accounts per run, processed in parallel
  • No login, no cookies, no session tokens

Overview

The Instagram Shop Scraper is built for competitive pricing teams, e-commerce analysts, dropshippers and lead-generation teams who need to see what a brand sells on Instagram and how to reach that brand.

The output is two row shapes in one dataset, labelled by resultsType:

  • shop — one row per account: merchant name, category, follower count, business address, contact email, phone, website, checkout style, and how many collections and products were found
  • product — one row per item: title, price, full price, discount percentage, currency, image, buy link and which collection it came from

Ask for one or both with resultsType.


Supported Inputs

Input types

InputExampleNotes
HandlefashionnovaThe usual case
@-handle@fashionnovaThe @ is stripped
Profile URLhttps://www.instagram.com/fashionnova/Any subdomain, trailing path or query is fine

Copy-pasteable input

{
"usernames": ["fashionnova", "skims", "aloyoga", "zara"],
"resultsType": "all",
"maxProductsPerShop": 50
}

Unsupported inputs

  • Post, reel and explore URLs — this actor takes accounts, not posts
  • Private accounts — a private account has no public shop
  • Product URLs or product IDs as input — products are discovered from the shop, not looked up individually

Use Cases

WhoProblemHow
Competitive pricingTrack what a rival charges and when they discountRun the rival's handles daily, diff priceAmount between runs
Price-drop monitoringCatch sales as they startSet onlyDiscounted and watch discountPercent
Dropshipping / sourcingFind what is selling and where it ships fromProducts plus websiteUrl and businessAddress on the shop row
B2B lead generationReach the brands behind Instagram shopsresultsType: "shop" returns contact email, phone and address per account
Market researchSize a category's price bandSweep a list of brand handles and aggregate priceAmount by category
Affiliate / catalogue buildingBuild a product feed with images and buy linksEvery product row carries imageUrl and externalUrl

How It Works

  1. Each input is normalised to a handle, whether given as a handle, an @-handle or a profile URL.
  2. The profile is fetched once. Instagram publishes a flag saying whether the account has a shop — if it says no, the account returns a labelled row and no shop requests are spent on it.
  3. The shop front is fetched: merchant identity, its collections, and the products displayed on the front itself.
  4. Each collection is paged for the products it holds. Products are deduplicated against everything already seen for that account, because the shop front and the collections overlap.
  5. With the shop card requested, Instagram's "About this shop" panel supplies the business address, contact email, phone and website.
  6. Rows are charged and delivered: one shop event per account, one product event per item.

Input Configuration

FieldTypeDefaultDescription
usernamesarray—Accounts to scrape. Handles, @-handles or profile URLs. Required.
resultsTypestringallall, shop (contact data only), or products
maxProductsPerShopintegerunlimitedCap products per account
onlyDiscountedbooleanfalseReturn only items priced below their full price

Example — contact data for a list of brands

{
"usernames": ["skims", "aloyoga", "sephora", "fashionnova"],
"resultsType": "shop"
}

Example — today's sale items only

{
"usernames": ["zara", "fashionnova"],
"resultsType": "products",
"onlyDiscounted": true,
"maxProductsPerShop": 100
}

Output Overview

Two row shapes, split on resultsType. Every row also carries input, the exact string you supplied, so results map back to your list even when a handle redirects.

Accounts that cannot be delivered return a row with error, errorMessage and errorKind instead — see the FAQ for what each one means.


Output Samples

A product row

{
"input": "fashionnova",
"resultsType": "product",
"username": "fashionnova",
"userId": "29883180",
"merchantId": "17841401775400466",
"merchantUsername": "fashionnova",
"productId": "27671422119202612",
"title": "Women's Alina Turtleneck Ribbed Midi Dress in Black",
"price": "$12.00",
"priceAmount": 12.0,
"fullPrice": "$24.99",
"fullPriceAmount": 24.99,
"isDiscounted": true,
"discountPercent": 52,
"currency": "$",
"imageUrl": "https://scontent-iad3-1.cdninstagram.com/v/t45.5328-4/797597465_...jpg",
"imageWidth": 1200,
"imageHeight": 1200,
"externalUrl": "https://www.fashionnova.com/products/alina-turtleneck-ribbed-midi-dress-black",
"checkoutStyle": "multi_item_checkout",
"collectionId": "seller_curated_v2:6672978339415599:29883180",
"collectionType": "seller_curated_v2"
}

A shop row

{
"input": "skims",
"resultsType": "shop",
"username": "skims",
"userId": "8688762057",
"fullName": "SKIMS",
"isVerified": true,
"category": "Clothing (Brand)",
"followerCount": 8100000,
"profileUrl": "https://www.instagram.com/skims/",
"hasShop": true,
"merchantId": "17841401775400466",
"merchantUsername": "skims",
"shopName": "SKIMS",
"businessAddress": "PO Box 1339, Culver City, CA 90232 - US",
"email": "help@skims.com",
"phone": "+17477775467",
"websiteUrl": "https://checkout.skims.com",
"privacyPolicyUrl": "https://checkout.shopify.com/25954484284/policies/12343771196.html?locale=en",
"logoUrl": "https://scontent-lhr11-1.cdninstagram.com/v/t39.30808-1/355872632_...jpg",
"checkoutStyle": "multi_item_checkout",
"collectionCount": 2,
"productCount": 8
}

Key Output Fields

product rows

productId, title, price, priceAmount, fullPrice, fullPriceAmount, isDiscounted, discountPercent, currency, imageUrl, imageWidth, imageHeight, externalUrl, checkoutStyle, collectionId, collectionType, merchantId, merchantUsername

shop rows

username, userId, fullName, isVerified, category, followerCount, biography, profileUrl, merchantId, merchantUsername, shopName, businessAddress, email, phone, websiteUrl, privacyPolicyUrl, logoUrl, checkoutStyle, collectionCount, productCount

price keeps Instagram's own formatting ("$12.00", "€3.59"); priceAmount is the same value as a number for sorting and arithmetic, and currency holds just the symbol.


FAQ

Which accounts have an Instagram shop? Brands that sell through Instagram's own shop tab. In a sample of twelve large accounts, nine had one. Creator and media accounts usually do not, and Nike removed theirs. The actor checks Instagram's own flag before spending anything, so a handle without a shop costs one request and returns a row saying no_shop.

Do I get the brand's whole catalogue? No, and no tool can — Instagram's shop feed is a curated window the merchant controls, typically 10 to 40 products, not the full catalogue behind their website. Every product carries externalUrl pointing at the merchant's own product page.

What does shop_unavailable mean? The profile says the account has a shop but Instagram would not render it. It is an Instagram-side failure and it often clears — retry that handle later. Two of ten live shops behaved this way during testing, so expect it occasionally rather than never.

Are prices in my currency? They are in the shop's currency, as Instagram serves it to a logged-out visitor. currency holds the symbol so you can group or convert afterwards. Zara returns euros, Fashion Nova dollars.

How is discountPercent calculated? From fullPriceAmount and priceAmount, rounded to the nearest percent, and only when the full price is genuinely higher. Some shops send the two prices equal on non-sale items, which is why presence of fullPrice alone is not treated as a discount.

Does maxProductsPerShop interact with onlyDiscounted? The cap applies after the filter, so asking for 5 with onlyDiscounted gives you 5 sale items, not the sale items among the first 5 products.

Am I charged for accounts with no shop? No. Rows carrying error are never charged.


Support

Found a bug or need a field that is not there? Open an issue on the actor's Issues tab and it will be looked at.

Email: muhamed.didovic@gmail.com


Additional Services

Need a custom scraper, a tailored export format, or an integration into your own pipeline? Custom builds are available — get in touch at muhamed.didovic@gmail.com.


Explore More Scrapers

  • Instagram Profile Scraper — profiles, posts and comments from any public account
  • Instagram Hashtag Scraper — top posts and reels from any public hashtag
  • Instagram Location Scraper — place cards with coordinates, contact data and tagged posts
  • Instagram Similar Profiles & Lookalike Finder — map a niche from one seed account
  • Instagram Stories & Highlights Scraper — active stories and permanent highlights
  • Instagram Comments Scraper — full comment threads with replies
  • Instagram Tagged Posts Scraper — every post where an account is tagged

Browse the full collection at apify.com/memo23.


🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/instagram-shop-products-scraper).

Purpose: Returns the product catalogue shown on a brand's Instagram shop tab, plus the merchant's published contact details.

Minimal input:

{ "usernames": ["fashionnova"], "resultsType": "all", "maxProductsPerShop": 50 }

Output: two row shapes in one dataset, distinguished by resultsType. product rows carry productId, title, price, priceAmount, fullPrice, fullPriceAmount, isDiscounted, discountPercent, currency, imageUrl, imageWidth, imageHeight, externalUrl, checkoutStyle, collectionId, collectionType. shop rows carry username, userId, fullName, isVerified, category, followerCount, biography, profileUrl, merchantId, merchantUsername, shopName, businessAddress, email, phone, websiteUrl, privacyPolicyUrl, logoUrl, checkoutStyle, collectionCount, productCount. Accounts that cannot be delivered return {input, resultsType: "error", error, errorMessage, errorKind}.

Behaviors an agent should know:

  • resultsType: "shop" skips product collection entirely — use it when only contact data is needed.
  • An account with no Instagram shop returns error: "no_shop" with errorKind: "unavailable"; it is an answer, not a failure, and is not charged.
  • error: "shop_unavailable" (errorKind: "failed") means the shop exists but Instagram did not render it. Retrying that handle later usually works.
  • Instagram's shop feed is a curated subset, so expect roughly 10–40 products per shop regardless of how high maxProductsPerShop is set.
  • onlyDiscounted filters before maxProductsPerShop caps.
  • Products are deduplicated per account across the shop front and its collections before delivery and billing.
  • Billing: one shop event per shop row, one product event per product row. Error rows are never charged.
  • No login is used, so no authenticated-only fields are available.

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available Instagram shop pages — no authenticated endpoints, paid features, or content behind the instagram.com login wall. Product prices, images and merchant details belong to the merchants that published them. Users are responsible for ensuring their use complies with instagram.com's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.


SEO Keywords

instagram shop scraper, instagram shopping scraper, scrape instagram products, instagram product scraper, instagram store scraper, instagram catalogue scraper, instagram price scraper, instagram ecommerce data, instagram merchant email scraper, brand contact scraper instagram, instagram shop API, competitor price monitoring instagram, instagram dropshipping research, product feed instagram, instagram shop products export, discount tracking instagram, instagram.com scraper, Apify instagram, no login instagram scraper