Build a weekly competitor price sheet from Shopify stores (Apify, no code)
Short answer: list 3–10 competitor Shopify or WooCommerce stores, run a product scraper on Apify with those URLs, download the result as CSV, and paste it into a new tab of one spreadsheet each week. A compare tab looks up last week's price for the same product URL or SKU and flags anything that moved. Setup takes under an hour; the weekly refresh takes about ten minutes.
What you end up with
| Store | Product | SKU | Last week | This week | Change | On sale? | In stock? |
|---|---|---|---|---|---|---|---|
| competitor-a.com | Cotton tee, black | TEE-BLK | ₹799 | ₹699 | −12.5% | Yes | Yes |
| competitor-b.in | Canvas tote | TOTE-01 | ₹1,199 | ₹1,199 | 0% | No | No |
Step 1: pick 3–10 competitor stores
- Choose shops that sell what you sell, to the same buyers. Three good competitors beat thirty random ones.
- Use the category page that matches your range (for example
/collections/t-shirts) rather than the homepage if the shop is large. You get fewer, more relevant rows. - Write the list in a note. You will reuse exactly the same list every week so the comparison stays fair.
- Skip marketplaces (Amazon, Flipkart, eBay). The scraper below does not fetch them, and their sellers change too often for a weekly sheet anyway.
Step 2: run the product scraper on Apify
- Create a free Apify account (no card needed for the free plan; check apify.com/pricing for the current monthly free usage).
- Open the E-commerce Product Scraper: Shopify & Woo and click Try for free. Current pricing is shown on that Store page.
- In the input form, paste your store or category URLs and set a cap. In JSON view the input looks like this:
{
"startUrls": [
{ "url": "https://competitor-a.com/collections/t-shirts" },
{ "url": "https://competitor-b.in" }
],
"maxProductsPerShop": 100,
"maxListingPages": 10,
"includeDescription": false
}
Turn includeDescription off for a price sheet; descriptions make the CSV wide and you do not need them. Click Save & Start.
How it reads each shop, best source first: Shopify products.json, the WooCommerce Store API, then schema.org JSON-LD, microdata and OpenGraph tags. Each row has the product title, brand, price, currency, sale price, stock, SKU/GTIN, variants and images.
Step 3: export CSV and check what was skipped
- When the run finishes, open the Output or Storage → Dataset tab and choose Export → CSV.
- Look for the
SHOPS_SUMMARYrecord. It lists every shop and why it was or wasn't scraped. Before fetching a shop the Actor checks robots.txt and scans the shop's terms of service, and skips the shop if they forbid scraping. Respect that: drop the shop from your list rather than trying another tool to get round it. - Column names can differ slightly from the table above. Map them once (title, price, sale price, currency, stock, SKU, product URL) and keep that mapping.
Step 4: make the weekly sheet
Use one Google Sheet (or Excel workbook) with these tabs:
- raw_2026-10-14 — paste this week's CSV as-is. Add a new tab each week (
raw_2026-10-21, …). Never edit raw tabs. - compare — one row per product you care about, with a key column (product URL is safest; SKU works if every shop fills it).
- notes — what you did about a change (matched, ignored, flagged to the team).
In compare, with the key in column A, pull prices from the two latest raw tabs. If the raw tab has the product URL in column A and price in column D:
This week: =IFERROR(VLOOKUP($A2,'raw_2026-10-21'!$A:$Z,4,FALSE),"") Last week: =IFERROR(VLOOKUP($A2,'raw_2026-10-14'!$A:$Z,4,FALSE),"") Change %: =IF(AND(ISNUMBER(C2),ISNUMBER(D2),C2<>0),(D2-C2)/C2,"")
Format the change column as a percentage and add conditional formatting: red when below −5%, green when above +5%. Sort by change so the biggest moves are at the top. A blank "this week" cell usually means the product was removed or renamed; check the shop before you act on it.
Step 5: repeat every week
- On Apify, open your last run and click Resurrect or start a new run from the saved task with the same input, so the store list never drifts.
- If you want it hands-free, create an Apify Schedule (Console → Schedules) for the same day and time each week, then just download the CSV.
- Same day each week matters: many shops run weekend sales, so a Monday sheet compared with a Saturday sheet will mislead you.
Reading the sheet without over-reacting
- A one-week drop is often a sale. Check the sale-price column before you cut your own price.
- Out-of-stock competitors are an opportunity, not a price signal.
- Compare like with like: same size, same pack, same currency. Convert currency in a separate column if you track shops abroad.
Optional: find a shop's public contact inbox
If a competitor is also a possible wholesale partner, the Contact Details Scraper: Emails, Phones, Socials (also an Unadhi product) reads the shop's public pages and returns shared role inboxes such as sales@ or support@, plus phone and social links. Personal addresses are dropped by default. Use it for genuine one-to-one enquiries only, not bulk cold email.
Our own test numbers (29 Sep 2026): on 32 shop URLs the E-commerce Product Scraper returned 536 products from 11 shops; on a re-check of 88 products, title and price matched the page on all 88. Those are one-off measurements on our test list, not a guarantee for your stores. You can follow this guide with any product scraper without buying anything from us.
This guide is general information, not legal advice. Both Actors read only public pages, use an honest bot User-Agent, follow robots.txt, never log in and never get around blocks. You are responsible for how you use the data and for following each shop's terms and your local law.
Related guides
- Export Shopify store products to CSV
- E-commerce Product Scraper: what it does and when to use it
- Copy-paste inputs for the Contact Details and Product scrapers
- Enrich a Google Maps Apify dataset with emails and phones
Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.