[{"data":1,"prerenderedAt":244},["ShallowReactive",2],{"learn-lesson-competitor-price-monitoring-export-to-sheets-bi-and-erp":3},{"course":4,"lesson":68,"index":200,"outline":201,"prev":242,"next":243},{"slug":5,"order":6,"level":7,"time":8,"card_text":9,"seo":10,"hero":16,"outcomes":26,"who":36,"syllabus":47,"faq":50,"lessonCount":67},"competitor-price-monitoring",1,"No coding required","8 lessons, about 90 minutes","From \"we check three competitors by hand on Mondays\" to a feed you trust enough to reprice from. The eight decisions in order, including the two that quietly ruin most projects.",{"title":11,"description":12,"keywords":13,"og_title":14,"og_description":15},"Competitor Price Monitoring: A Free 8-Lesson Course","Build a competitor price monitoring pipeline end to end: pick competitors, find product URLs, extract prices, match to your catalogue, schedule, export, reprice. Free, ungated.","competitor price monitoring, price monitoring course, how to track competitor prices, price tracking pipeline, competitor price tracking tutorial, retail price monitoring","A free course on building a competitor price monitoring pipeline","Eight written lessons on the part nobody covers: matching, data quality, and turning prices into decisions.",{"badge":17,"title":18,"subtitle":19,"cta_primary":20,"cta_secondary":23},"Course one","Build a competitor price monitoring pipeline","Price monitoring looks like a scraping problem for about a week. Then you discover that scraping was the easy part, and the project actually lives or dies on which competitors you picked, whether their listings are really the same product as yours, and whether anyone notices the morning the feed comes back half empty. This course is those eight decisions, in the order you have to make them.",{"label":21,"url":22},"Start with lesson one","/learn/competitor-price-monitoring/what-is-competitor-price-monitoring",{"label":24,"url":25},"Try the free price checker","/tools/free-competitor-price-checker",{"title":27,"items":28},"What you will be able to do",[29,30,31,32,33,34,35],"Say which competitors matter to your margin, and defend the list to a finance director","Collect competitor product URLs without copying them one at a time","Decide which fields you actually need, and which ones are a trap","Judge a match rate honestly, including the denominator that most vendors quietly change","Spot a feed that has silently degraded before a buyer acts on it","Put the numbers where the decision is made, instead of in a dashboard nobody opens","Write a repricing rule that survives contact with a competitor who is out of stock",{"title":37,"for_title":38,"for":39,"not_title":43,"not_for":44},"Who this is for","Written for",[40,41,42],"Pricing, category and e-commerce managers who own the number","Marketplace sellers repricing against a handful of named rivals","Anyone evaluating price monitoring vendors who wants to ask better questions","Not written for",[45,46],"Engineers who want a tutorial on CSS selectors and headless browsers — that is a different and much shorter problem","Anyone looking for a sub-second price feed; nothing here runs faster than daily",{"title":48,"intro":49},"The eight lessons","Each one ends where the next one starts. Four lessons are pure method; the ones that walk through our product say so in their own heading.",{"badge":51,"title":52,"description":53,"items":54},"FAQ","Before you start","Questions people ask in the first ten minutes.",[55,58,61,64],{"title":56,"description":57},"Do I need a Scrapewise account to follow this?","For five of the eight lessons, no. Lessons three, four and seven walk through doing the thing in our portal and are marked as needing an account. A new account comes with five free requests and no card, which covers those lessons.",{"title":59,"description":60},"Is scraping competitor prices legal?","This is not legal advice. Reading a publicly visible price is not the same question as storing it, republishing it, or building a product on it, and the answer changes by jurisdiction and by the site's own terms. Lesson two covers how to keep the collection narrow enough that the question stays simple, but take your own advice before you start.",{"title":62,"description":63},"How often can prices be checked?","This course assumes a daily cycle, which is what most retail pricing decisions actually run on. If you need minute-level reaction — a marketplace buy box, an airline fare — the architecture in lesson six is wrong for you and you want an event-driven system instead.",{"title":65,"description":66},"What if my competitors are not online retailers?","The method holds for any public price list: distributors, wholesalers, rental catalogues. What changes is lesson three, because those sites rarely have a clean product sitemap. Lesson three covers that case directly.",8,{"slug":69,"nav_title":70,"title":71,"summary":72,"time":73,"needs_account":74,"seo":75,"blocks":79,"takeaways":191,"next_step":196},"export-to-sheets-bi-and-erp","Getting the data out","Getting the data into Sheets, BI or your ERP","Four delivery routes ranked by how likely they are to actually get used, and the column contract that stops downstream jobs breaking.","9 min",true,{"title":76,"description":77,"keywords":78},"Exporting Competitor Price Data to Sheets, BI or ERP","Four ways to deliver a price feed — spreadsheet, CSV drop, REST API, warehouse — and the stable column contract that keeps downstream jobs from breaking.","export price data, price feed api, competitor prices google sheets, price data bi dashboard, csv price export, rest api price monitoring",[80,85,109,114,122,132,176,186],{"type":81,"paragraphs":82},"prose",[83,84],"A correct, well-matched, well-monitored price feed that lands somewhere nobody looks has the same business value as no feed at all. This lesson is short because the principle is simple: deliver into the tool where the pricing decision is already being made, not into a new tool you are hoping people will adopt.","In practice that is almost always a spreadsheet, and there is no shame in it.",{"type":86,"title":87,"headers":88,"rows":92},"table","Four routes",[89,90,91],"Route","Good for","The catch",[93,97,101,105],[94,95,96],"Spreadsheet","A pricing manager who already works in one","Breaks at a few hundred thousand rows; versions multiply",[98,99,100],"Scheduled CSV or Excel drop","Feeding an existing internal job","Somebody has to own the filename convention and the failure case",[102,103,104],"REST API","Your own application or an automation tool","Requires a developer once; then it is the lowest-maintenance option",[106,107,108],"Warehouse table","Teams already running BI","Highest setup cost, and only pays off if the dashboards get opened",{"type":81,"title":110,"paragraphs":111},"The column contract",[112,113],"Whatever the route, the single most valuable property of a feed is that its columns do not move. Downstream jobs — a spreadsheet formula, an ETL step, a repricing script — are written against column names and positions, and they break silently when those change. A column that disappears usually produces a blank rather than an error, and a blank price reads as free.","So pin the contract. Every run returns the same columns, in the same order, with the same names, whether or not a particular page had a value for them. An empty cell is a valid answer and must be distinguishable from a missing column. Adding a new column at the end is safe; renaming or reordering is not, and should be treated as a versioned change with a deprecation window, however informal.",{"type":115,"variant":116,"title":117,"text":118,"cta":119},"callout","product","Doing it in Scrapewise","Every run is retrievable over REST with a stable column set, or downloadable as CSV or Excel from the portal. The columns come from the schema you defined in lesson four, which is what keeps them identical across every competitor in the group — the thing that makes a single downstream job work for all of them rather than one per site.",{"label":120,"url":121},"See how the exports work","/how-it-works",{"type":123,"title":124,"intro":125,"items":126},"list","Fields the consumer of the feed will ask for within a week","Include them from the start; retrofitting them means reprocessing history.",[127,128,129,130,131],"The observation timestamp, not just the date — so a reader can tell a morning sample from an evening one","The competitor name as a clean key, not as a URL to be parsed","Your own SKU alongside their identifier, so no downstream join is needed","The match tier, so a reader can see which rows are EAN-certain and which are a judgement call","The source URL, so a surprising number can be checked by clicking it",{"type":86,"title":133,"intro":134,"headers":135,"rows":139},"Worked example: a column contract in full","The whole contract for a morning sheet — every column, in a fixed order, emitted on every run whether or not there is a value for it. The right-hand column is the part that matters: it is what everything downstream is entitled to assume. Guarantees five and six exist because a spreadsheet treats an empty cell as zero in most arithmetic, and a zero price reads as free.",[136,137,138],"#","Column","Guarantee",[140,144,148,152,156,160,164,168,172],[141,142,143],"1","captured_at","Always present, UTC, ISO 8601. Never the time the sheet was opened.",[145,146,147],"2","competitor_key","A stable slug, never the display name. Renaming a shop must not break a formula.",[149,150,151],"3","your_sku","Your identifier, not theirs. This is the join key for everything downstream.",[153,154,155],"4","match_tier","1 to 4, present even when the match is certain.",[157,158,159],"5","list_price","Empty if the page showed no struck-through price. Empty, not zero.",[161,162,163],"6","sale_price","Empty if there was no promotion. Empty, not a copy of list_price.",[165,166,167],"7","currency","ISO code, on every row, including rows from your home market.",[169,170,171],"8","availability_text","Verbatim from the page, uninterpreted.",[173,174,175],"9","source_url","The page the row came from, so an argument can be settled in one click.",{"type":123,"title":177,"intro":178,"items":179},"What usually goes wrong","Delivery is the stage where a technically correct feed becomes a feed nobody uses.",[180,181,182,183,184,185],"Emitting a column only when it has data. The header row shifts, every formula in the sheet moves one column left, and the error stays silent for a week.","Building a dashboard first. It gets opened on launch day and at the quarterly review, while the pricing decision carries on happening in a spreadsheet nobody told you about.","Delivering the competitor's identifier and not yours. Every consumer then has to redo the join, and each of them will do it slightly differently.","Using zero as the empty value. A zero price is a 100% undercut, and most repricing rules will act on it before anyone notices.","Overwriting yesterday's file. The first time somebody asks \"when did they drop it?\", the only honest answer is \"sometime in the last month\".","Emailing the whole catalogue every morning. It stops being opened in week three. Send the rows that moved and link to the full sheet.",{"type":81,"title":187,"paragraphs":188},"Ship one view, not a platform",[189,190],"The strongest first deliverable we have seen is a single sheet, refreshed every morning, with one row per in-scope product and one column per competitor, cells coloured by whether you are above or below. No navigation, no filters, no login. It is unglamorous and people open it.","The elaborate version — the dashboard with the drill-downs and the trend charts — is the right second deliverable, once the daily sheet has proven somebody cares. Built first, it is usually the thing that makes the project look expensive and optional at the same time.",[192,193,194,195],"Deliver into the tool where the decision already happens. That is usually a spreadsheet.","Freeze the column contract: same names, same order, every run. A missing column reads as a blank, and a blank price reads as free.","Include timestamp, competitor key, your SKU, match tier and source URL from day one.","Ship one morning sheet before building a dashboard. Adoption first, sophistication second.",{"text":197,"label":198,"url":199},"Last lesson: turning a column of competitor prices into a decision that does not destroy your margin.","Lesson 8: from price data to repricing rules","/learn/competitor-price-monitoring/turn-price-data-into-repricing-rules",6,[202,208,214,220,225,231,236,237],{"slug":203,"navTitle":204,"title":205,"summary":206,"time":73,"needsAccount":207},"what-is-competitor-price-monitoring","What it actually is","What competitor price monitoring actually is","The four stages of a price pipeline, why only two of them are scraping, and the one question to ask before you build anything.",false,{"slug":209,"navTitle":210,"title":211,"summary":212,"time":213,"needsAccount":207},"choose-competitors-and-skus","Choosing what to track","Choosing which competitors and which SKUs to track","How to build a list that is small enough to afford and large enough to matter, using margin at risk rather than gut feel.","11 min",{"slug":215,"navTitle":216,"title":217,"summary":218,"time":219,"needsAccount":74},"find-competitor-product-urls","Finding product URLs","Finding every competitor product URL without copying them by hand","Four ways to get a competitor's full product URL list, ranked by how much work they are, and what to do when none of them work.","12 min",{"slug":221,"navTitle":222,"title":223,"summary":224,"time":219,"needsAccount":74},"extract-price-stock-and-shipping","Extracting the fields","Getting price, stock and shipping off the page","Which fields to extract, why the sale price is two fields and not one, and the four ways a price appears on a page.",{"slug":226,"navTitle":227,"title":228,"summary":229,"time":230,"needsAccount":207},"match-listings-to-your-catalogue","Matching to your catalogue","Matching competitor listings to your own catalogue","The stage that decides whether your feed is intelligence or fiction, and the denominator trick that makes bad match rates look good.","13 min",{"slug":232,"navTitle":233,"title":234,"summary":235,"time":213,"needsAccount":207},"schedule-runs-and-catch-silent-failure","Scheduling and data quality","Scheduling runs and catching silent data loss","How often to actually check, and the four alerts that catch a degrading feed before someone reprices from it.",{"slug":69,"navTitle":70,"title":71,"summary":72,"time":73,"needsAccount":74},{"slug":238,"navTitle":239,"title":240,"summary":241,"time":219,"needsAccount":207},"turn-price-data-into-repricing-rules","From data to decisions","Turning price data into repricing decisions","Why \"match the cheapest\" destroys margin, what a rule needs besides a competitor price, and how to start without automating anything.",{"slug":232,"navTitle":233,"title":234,"summary":235,"time":213,"needsAccount":207},{"slug":238,"navTitle":239,"title":240,"summary":241,"time":219,"needsAccount":207},1791047866867]