[{"data":1,"prerenderedAt":239},["ShallowReactive",2],{"learn-lesson-competitor-price-monitoring-schedule-runs-and-catch-silent-failure":3},{"course":4,"lesson":68,"index":195,"outline":196,"prev":237,"next":238},{"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":186,"next_step":191},"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.","11 min",false,{"title":76,"description":77,"keywords":78},"Price Monitoring Data Quality: Catching Silent Feed Failure","How often to run price checks, and the four alerts that catch a feed degrading quietly: row count, null rate, price jumps and staleness.","price monitoring data quality, scraper monitoring, silent data loss, scraping alerts, price feed reliability, how often to check competitor prices",[80,85,91,96,121,126,136,140,171,181],{"type":81,"paragraphs":82},"prose",[83,84],"There are two questions in this lesson and the second one matters more. How often should you check? And how will you find out when checking stops working?","Almost every team gets the first right by accident and the second wrong for months.",{"type":81,"title":86,"paragraphs":87},"How often",[88,89,90],"Match the cadence to the decision, not to what is technically possible. If your prices are reviewed weekly by a human, a daily feed is already giving them more than they can use, and an hourly feed is giving them seven times the bill for the same decision.","Daily, overnight, is right for the large majority of retail. Weekly is right for slow categories and for the long-tail competitors you decided in lesson two to watch rather than track. Intra-day genuinely matters in two situations: marketplace buy-box repricing, where the feedback loop is minutes, and flash-sale-heavy categories where a competitor's promotion starts and ends inside a day.","One detail worth getting right: run at the same time every day, and record the timestamp with the row. Prices change through the day, and a feed that samples at 03:00 on Monday and 14:00 on Tuesday produces price movements that are artefacts of your own schedule.",{"type":92,"variant":93,"title":94,"text":95},"callout","warning","The failure mode that matters","Scrapers rarely stop. They degrade. The run completes, the job is green, the file lands at the usual time — and it has 6,200 rows instead of 8,900 because a redesign broke one competitor's price element. Nothing alerts, because nothing errored. Three weeks later someone notices the feed has been missing a competitor's entire electronics range, and every repricing decision made in that window was taken on partial data.",{"type":97,"title":98,"intro":99,"headers":100,"rows":104},"table","Four alerts that catch almost everything","None of these are sophisticated. All of them are better than a green tick on a completed job.",[101,102,103],"Alert","Trigger","What it usually means",[105,109,113,117],[106,107,108],"Row count drop","Today's rows below 90% of the trailing 7-day median","A competitor redesigned, or added a bot wall, or you lost a category",[110,111,112],"Null rate spike","A field that is normally 98% populated falls below 90%","That specific field moved on the page; the rest of the row is fine",[114,115,116],"Implausible price move","A price changes by more than 50% overnight","Usually a decimal separator or a currency flip, occasionally a real clearance",[118,119,120],"Staleness","A tracked product has not returned a price for 3 consecutive runs","The URL is dead, or it is genuinely discontinued — both need action",{"type":81,"title":122,"paragraphs":123},"Alert per competitor, not per feed",[124,125],"This is the detail that makes the difference between alerts that work and alerts that get muted. If you have eight competitors and one of them breaks completely, your total row count drops by maybe twelve percent — comfortably inside the noise of a whole-feed threshold, and completely invisible.","Compute the same four checks per competitor, and a total failure becomes a hundred percent drop on one segment, which no threshold can miss. The cost is a slightly longer alert configuration; the benefit is catching the exact failure that a feed-level alert is structurally blind to.",{"type":127,"title":128,"items":129},"list","Things that will break your run, roughly in order of likelihood",[130,131,132,133,134,135],"A competitor redesigns their product template, usually without warning and usually in Q1","A bot wall appears, often seasonally, often only for datacentre IP ranges — meaning it works from your laptop and fails in production","A product URL starts redirecting to a category page, which returns a valid 200 and no price","A market or language switch changes the currency served from the same URL","Your own in-scope list grows and nobody updated the expected row count, so the baseline is wrong","A promotion changes the price element entirely for the duration of a sale, then changes back",{"type":92,"variant":137,"title":138,"text":139},"note","Test from where it runs","The second item on that list deserves its own warning. Bot walls very often key on the IP range, so a competitor's page that loads perfectly in your browser can return a 403 from a cloud server. Debugging that from your laptop produces a confident, wrong conclusion. Always reproduce the failure from the machine that actually makes the request.",{"type":97,"title":141,"intro":142,"headers":143,"rows":148},"Worked example: the morning a feed lost a quarter of itself","Alerts only work if someone wrote down what normal looks like first. One competitor over five days, with the row-count threshold set at 10% below the trailing median. No job failed in that week — every one of the five runs exited zero. Thursday's 531 was a category page that had started paginating differently, and without the row-count check the first sign of it would have been a buyer asking why a product had vanished from the sheet.",[144,145,146,147],"Day","Rows returned","Null price rate","Verdict",[149,154,158,162,167],[150,151,152,153],"Monday","712","1.1%","normal",[155,156,157,153],"Tuesday","709","0.8%",[159,160,161,153],"Wednesday","714","1.0%",[163,164,165,166],"Thursday","531","1.2%","alert — 25% below the 712 median",[168,169,161,170],"Friday","528","second day running — now an incident",{"type":127,"title":172,"intro":173,"items":174},"What usually goes wrong","Every item here describes a pipeline whose dashboard is entirely green.",[175,176,177,178,179,180],"Alerting on the whole feed instead of per competitor. One competitor out of five dropping to zero is a 20% dip in the total — under almost any sensible threshold, and therefore invisible.","Treating a green job as a good run. Exit code zero means the code finished, not that the page still contained what it used to contain.","Testing from your laptop. The competitor serves your office address happily and blocks the data centre the job runs in, so the check passes and the run does not.","Setting thresholds against a fixed number rather than a trailing median. Catalogues grow, so a static floor either fires every week or stops firing altogether.","Deleting failed runs. A table containing only successes cannot tell you whether a product was out of stock on Thursday or whether Thursday never happened.","Setting the price-jump threshold too tight. At 5% every promotional weekend is an incident and the alert gets muted; at 60% you still catch the decimal-point errors and currency mix-ups, which are the ones that actually corrupt a reprice.",{"type":81,"title":182,"paragraphs":183},"Keep the history, including the gaps",[184,185],"Store every observation with its date, rather than overwriting a current price column. The overwrite feels tidier and destroys the asset: price history is where you see that a rival's discount is cyclical, that they follow you within two days, that a category has been drifting down for a quarter.","Store the misses too. A row that returned no price on a given day is information — it may be a stock-out, a delisting or a broken scraper — and a table that only contains successes cannot tell you which. A gap you cannot see is a gap you will interpret as stability.",[187,188,189,190],"Match frequency to the decision cycle. Daily overnight suits most retail; hourly is for buy-box repricing.","Scrapers degrade far more often than they stop. A green job is not evidence of a good feed.","Run row-count, null-rate, price-jump and staleness checks per competitor, not across the whole feed.","Keep dated history including the failures. A table of successes cannot distinguish a stock-out from a broken run.",{"text":192,"label":193,"url":194},"A trustworthy feed in a system nobody opens still changes nothing. Next: getting it where the decision happens.","Lesson 7: exporting to Sheets, BI and your ERP","/learn/competitor-price-monitoring/export-to-sheets-bi-and-erp",5,[197,203,208,215,220,226,227,232],{"slug":198,"navTitle":199,"title":200,"summary":201,"time":202,"needsAccount":74},"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.","9 min",{"slug":204,"navTitle":205,"title":206,"summary":207,"time":73,"needsAccount":74},"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.",{"slug":209,"navTitle":210,"title":211,"summary":212,"time":213,"needsAccount":214},"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",true,{"slug":216,"navTitle":217,"title":218,"summary":219,"time":213,"needsAccount":214},"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":221,"navTitle":222,"title":223,"summary":224,"time":225,"needsAccount":74},"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":69,"navTitle":70,"title":71,"summary":72,"time":73,"needsAccount":74},{"slug":228,"navTitle":229,"title":230,"summary":231,"time":202,"needsAccount":214},"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.",{"slug":233,"navTitle":234,"title":235,"summary":236,"time":213,"needsAccount":74},"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":221,"navTitle":222,"title":223,"summary":224,"time":225,"needsAccount":74},{"slug":228,"navTitle":229,"title":230,"summary":231,"time":202,"needsAccount":214},1791047866858]