πŸš€ Online Business & Marketing

Price Monitoring: The Complete Guide

Price monitoring is one of the highest-return applications of web data, and one of the easiest to do in a way that produces confidently wrong numbers. The mechanics look trivial β€” fetch a product…

Price monitoring is one of the highest-return applications of web data, and one of the easiest to do in a way that produces confidently wrong numbers. The mechanics look trivial β€” fetch a product page, extract a number, store it β€” and almost every part of that sentence conceals a decision that determines whether your data means anything.

Which number? The list price or the promotional one? Including tax or not? For which market? At which quantity? On which seller's listing? At what moment? Two teams monitoring the same competitor can produce entirely different pictures of the same market, and both can be defensible, and only one can be compared against your own prices meaningfully.

This guide covers what a price actually is in a monitoring context, how to build collection that produces comparable data, why geography and timing matter more here than almost anywhere, how to handle product matching, and how to turn observations into pricing decisions without stepping into the competition law problems that this specific use case attracts.

What "The Price" Actually Means

There is rarely a single price on a product page, and choosing which one you record is a methodological decision rather than a technical one.

The components you may encounter:

  • List or reference price, sometimes struck through
  • Current selling price, which may be promotional
  • Member or loyalty price, visible only to signed-in users
  • Quantity-break pricing, where unit cost falls with volume
  • Subscription pricing versus one-time purchase
  • Tax-inclusive or tax-exclusive display, which varies by market convention and by whether the site targets consumers or businesses
  • Shipping cost, which may be free above a threshold, calculated at checkout, or destination-dependent
  • Import duties and fees for cross-border purchases
  • Bundled items or accessories included in the price
  • Currency, and whether the site converts or charges in local currency
  • Financing or instalment presentation, which some sites display more prominently than the total

The landed cost β€” what a customer actually pays to receive the item β€” is frequently the only comparable figure, and it's the hardest to obtain because it depends on destination, quantity, and sometimes account status.

The practical guidance: capture the components separately rather than a single number. Record list price, selling price, shipping, tax treatment, currency, and any conditions as distinct fields. Compute comparisons downstream from those components, where the methodology is explicit and can be changed without recollecting. A pipeline that stores one price field has thrown away the information needed to answer the next question anyone asks.

> Tip: The first serious question anyone asks about a price monitoring dataset is "does that include shipping?" If you can't answer it per record, the dataset isn't finished.

Who Uses Price Monitoring and Why

The use case varies enough by role that the same infrastructure serves quite different purposes.

Retailers and brands monitor competitors to inform their own pricing, identify where they're leaving margin on the table, and detect when a competitor is discounting into their category. This is the archetypal case and the one with the most direct revenue connection.

Manufacturers and distributors monitor for minimum advertised price compliance β€” checking whether authorised resellers are pricing below agreed floors, and identifying unauthorised sellers listing their products at all. This requires broad marketplace coverage more than deep competitor coverage, and it overlaps substantially with brand protection.

Marketplace sellers monitor to win buy boxes and manage algorithmic repricing. Extremely high frequency, narrow product focus, and the most latency-sensitive version of the use case.

Procurement teams monitor supplier and vendor pricing to inform purchasing decisions and negotiate. Often B2B, where prices are less publicly displayed and the data is harder to obtain.

Travel, hospitality, and ticketing operate in categories where prices change constantly and are heavily dependent on date, occupancy, and demand. The tracked entity is a price for a specific date and configuration rather than a static product, which multiplies the tracked set enormously.

Investors and analysts track pricing across a sector as a signal about competitive dynamics and margin pressure, usually at lower frequency and broader coverage.

Consumer-facing comparison services collect prices as their actual product, which changes the requirements β€” coverage completeness and freshness become the deliverable rather than an internal input.

The relevant question for any of these: what decision does this data inform, and how fast does that decision need to be made? That answer determines frequency, coverage, and how much you should spend on infrastructure.

Geography and Timing: The Two Confounders

More than in most web data work, these two variables will corrupt your comparisons if you don't control them.

Geography. Prices are regionalised deliberately and extensively:

  • Different markets carry different prices for the same item
  • Currency and conversion vary
  • Tax treatment differs by jurisdiction and is sometimes included in display, sometimes not
  • Shipping cost and availability depend on destination
  • Some products simply aren't sold in some markets
  • Promotional calendars differ by region

Collecting from one location and presenting it as a market picture is the most common failure in this field. Datacenter addresses geolocate to a small number of hosting hubs, which means "US pricing" collected from a datacenter may be one specific city's view, and a "European" address may resolve somewhere that returns a different currency than intended.

Timing. Prices move, and the timing of your observation determines what you record:

  • Promotional periods, flash sales, and time-limited offers
  • Dynamic and algorithmic repricing, which on some marketplaces changes prices many times a day
  • Day-of-week and time-of-day patterns
  • Seasonal and event-driven cycles

What controlled collection looks like:

  • Collect from addresses genuinely in each market you're describing, with granularity matched to how the pricing actually varies
  • Collect all competitors at the same time, or as close as practical. A comparison assembled from observations hours apart during a promotional period is comparing different moments
  • Record the exact timestamp with every observation
  • Hold your schedule constant. Changing collection time mid-series introduces shifts that read as pricing changes
  • Tag every record with its collection location, so regional variation is separable from noise
  • Verify targeting worked β€” currency, language, and shipping options are the tells that you reached the intended market

Product Matching: Where the Work Is

The unglamorous problem that determines whether your comparisons mean anything, and the one that consumes most of the engineering effort.

The same product appears across retailers as different strings, different pack sizes, different bundles, and different identifiers. Comparing your price against a competitor's requires knowing you're looking at the same thing, and getting this wrong produces comparisons that are silently nonsense β€” a six-pack against a single unit, a refurbished item against new, a regional variant against the standard model.

Use identifiers where they exist. Manufacturer part numbers, barcodes, model numbers, and standard product identifiers are reliable and frequently absent.

Normalise before matching. Case, punctuation, whitespace, abbreviations, unit representations, and pack size notation account for a large share of non-matches.

Extract structured attributes. Brand, model, capacity, size, colour, and variant. Attribute-level matching is far more reliable than title string matching.

Match with a confidence score, not a binary decision, and record the score so downstream analysis can filter on it.

Review the ambiguous middle manually. High-confidence matches and clear non-matches need no attention. Errors live in between, and sampling there is worth a great deal.

Decide variant policy explicitly. Is a different colour the same product for pricing purposes? A different pack size? A bundle including an accessory? A refurbished unit? These are commercial decisions, not technical ones, and they should be documented rather than emerging from whatever the code happened to do.

Maintain a persistent match registry. Once resolved, record the mapping. Re-matching between runs produces inconsistency that shows up as fake price movements.

Monitor your match rate. A falling rate is an early signal that a source changed its formatting, and it degrades silently.

Extraction Techniques for Price Data

Getting the number off the page reliably is harder than it looks, and the approaches differ substantially in fragility.

Structured data first. Most retail product pages embed structured markup β€” JSON-LD, microdata, or Open Graph tags β€” describing the product, price, currency, and availability. This is machine-readable by design, dramatically more stable than CSS selectors, and routinely ignored in favour of scraping the visible page. Always check for it first.

Internal API endpoints. Many modern retail sites render prices from a JSON endpoint the frontend calls. Open the network tab, filter to XHR, and look at what the page actually requests. Calling that directly replaces a heavy rendered page with a small structured response, eliminates parsing fragility, and often returns fields the visible page doesn't display β€” inventory counts, tier pricing, or variant-level data.

Visible DOM extraction. The fallback, and the most fragile. If you must, prefer semantic attributes and data attributes over positional CSS selectors, since class names change more often than structure.

Common extraction traps:

  • Struck-through reference prices captured instead of the selling price. Both are on the page and they look similar in markup.
  • "From" prices on multi-variant products, where the displayed price is the cheapest variant rather than the one you're tracking.
  • Prices split across elements, with currency symbol, integer, and decimal in separate nodes.
  • Decimal and thousand separators varying by locale, so a European price parses as a thousandfold error.
  • Prices rendered as images or obfuscated deliberately, which some retailers do specifically to frustrate collection.
  • Multiple prices on one page β€” the product, related items, bundles, and recently viewed β€” where a loose selector catches the wrong one.
  • Instalment or monthly pricing displayed more prominently than the total.

Validate at extraction time. Assert that the value parses as a number, falls within a plausible band for the category, and carries a currency you expected. Failing loudly at extraction is far better than storing a number that's wrong by a factor of a hundred.

Extract availability in the same pass. Stock status, delivery estimate, and seller identity are all needed to interpret the price and all present on the same page.

Designing the Monitoring Programme

Define the tracked set deliberately. Which products, which competitors, which markets. A product monitored at three competitors in four markets is twelve tracked entries, and the multiplication is worth doing before committing to a collection volume.

Prioritise by commercial impact. Your highest-revenue and most price-sensitive items warrant frequent monitoring. The long tail rarely justifies daily collection.

Match frequency to how fast prices actually move. Some categories reprice multiple times daily; others change quarterly. Collecting faster than reality changes generates cost and noise without information. Measure the actual change rate for a sample before setting a schedule.

Frequency beats breadth for most purposes. Fifty important products checked hourly is usually more actionable than five thousand checked weekly, because pricing decisions are made on movements rather than on levels. Broad coverage is worth having for positioning analysis; it is not worth having at the expense of frequency on the items that actually matter commercially.

Scrape the product page, not just the listing. Category and search listing pages frequently show different prices from the product page, omit shipping, or display a "from" price for the cheapest variant. The listing is convenient and unreliable.

Handle multi-seller marketplaces carefully. A marketplace listing may have many sellers at different prices. Decide whether you're tracking the buy-box winner, the lowest price, a specific seller, or the distribution, and be consistent.

Capture availability alongside price. An out-of-stock item at a low price isn't competing with you, and treating it as though it is distorts every aggregate.

Store raw responses. When you later need a field you didn't extract, or discover a parsing error, reprocessing history is only possible if you kept the source.

Handling Dynamic and Personalised Pricing

An increasing share of retail pricing is not a fixed number on a page, which complicates monitoring in ways worth planning for.

Algorithmic repricing means some marketplace listings change many times a day in response to competitors. A single daily observation of such a listing is close to meaningless β€” you're sampling a moving series at one arbitrary point. Either raise frequency for those specific listings or report a range rather than a value.

Session and account-based pricing. Some sites vary prices by whether you're logged in, by loyalty tier, or by cart contents. Public collection sees the anonymous price, which may not be what most customers pay. Note this as a limitation rather than pretending it isn't there.

Geographic and device-based variation. Beyond straightforward regional pricing, some sites vary by device type or by inferred location at a finer granularity than country. Testing whether this happens on your key competitors is worth doing once.

Time-limited and flash pricing. Short promotional windows may be entirely missed by a daily schedule, or may be the only thing a badly-timed observation catches. Higher frequency on key items is the only real defence.

Cart-level pricing. Where the true price only materialises at checkout β€” after shipping calculation, tax, and any cart-level discounts. Collecting this requires progressing through a checkout flow, which raises both technical difficulty and terms-of-service questions.

Practical handling:

  • Measure the volatility of each tracked item before deciding its frequency
  • Report ranges and distributions for high-volatility items rather than point values
  • Record every observation rather than overwriting, so the series shows the movement
  • Flag items whose observed variance exceeds a threshold as requiring different treatment
  • Document what your collection cannot see β€” logged-in pricing, cart-level discounts β€” so consumers of the data calibrate accordingly

Detecting Silent Failures

Price data fails plausibly. A broken extractor returns a number, and numbers get used to set prices.

Validate the shape of what you extracted. A price should be within a plausible range for the category. An order-of-magnitude change is a parsing error until proven otherwise β€” usually a decimal separator misread or a struck-through reference price captured instead of the selling price.

Alert on implausible movement. A competitor dropping 80% overnight across their catalogue is a collection problem, not a price war.

Track extraction rates per field and per source. If shipping cost extraction drops from 95% to 10%, the layout changed.

Watch for currency mix-ups. A price that suddenly changes by roughly a known exchange rate is a geo-targeting failure, not a repricing.

Check response sizes. A challenge page or a redirect to a generic category page is much smaller than a product page, and both can parse as "no price found."

Distinguish absence states. Out of stock, product delisted, page failed to load, price not found on page, and not yet collected are five different things. Collapsing them into null produces charts that lie.

Sample manually. Check a handful of tracked products against the live page by hand, monthly. This catches what automated validation didn't think to look for, and it's the only defence against systematically wrong data that looks fine.

Data Model Worth Building

The schema decisions that determine whether the dataset can answer future questions.

One record per observation, never overwritten. Prices are a time series. Updating a current-price field destroys the history that makes the data valuable, and history cannot be recollected.

The observation key should be: product identity, seller identity, market, collection timestamp. Anything less and you'll find yourself unable to distinguish a genuine change from a different seller or a different market.

Store price components separately: list price, selling price, currency, tax treatment flag, shipping cost, shipping conditions, quantity basis, and any promotional label. Compute comparisons downstream.

Store availability and seller context: stock status, delivery estimate, seller name, seller rating where relevant, and buy-box status on marketplaces.

Store collection metadata: proxy tier, exit location, detected market, extraction method version, and match confidence. When a number is questioned, this is what lets you answer in minutes rather than days.

Store extraction confidence. Not every observation is equally reliable. Recording whether the price came from structured data, an internal endpoint, or a fragile DOM selector lets downstream analysis weight accordingly.

Model absence explicitly with distinct states rather than nulls: out of stock, delisted, page unreachable, price not found, not yet collected.

Keep the product match separate from the observation. The match registry maps your product to each competitor's listing. Changing a match shouldn't require rewriting historical observations, and observations shouldn't embed a match decision that later turns out to be wrong.

Partition by collection date. Makes reprocessing, retention, and incremental analysis straightforward at volume.

Proxy Requirements

Price monitoring has a demanding profile, and matching it properly matters.

Retailers and marketplaces frequently block hosting ranges. This is one of the target categories most likely to require residential addresses, so expect to escalate more often than in general scraping.

Geographic targeting is a correctness requirement, not an optimisation. If you're monitoring multiple markets, you need addresses genuinely located in them, with granularity matched to how prices actually vary β€” country level for most purposes, city level where delivery zones or local inventory affect pricing.

Sticky sessions matter more than usual. Many retail sites hold currency, market, and delivery destination in a session. An address change mid-sequence resets that context and produces inconsistent data. Hold the session for the duration of a product sequence.

Test per source rather than assuming. Not every retailer runs aggressive detection. Run five hundred requests through datacenter addresses against each significant source and record the status distribution. The results usually split into a permissive majority you can collect cheaply and a demanding minority that needs residential.

Bandwidth adds up on product pages. Retail pages are heavy β€” images, scripts, tracking. If you're rendering with a headless browser on metered residential plans, either block non-essential resources or reconsider whether rendering is necessary. Many retail sites expose product data through an internal JSON endpoint that's a fraction of the size and far more stable to parse.

Segment your workload. Category discovery, product page collection, and availability checking have different requirements and shouldn't all run through the same tier.

Turning Data Into Pricing Decisions

Comparison requires normalisation. Currency, tax treatment, pack size, and shipping must be reconciled before any comparison is meaningful. Unnormalised comparison produces confident nonsense.

Track changes, not just levels. When a competitor changed price is usually more informative than what their price is. Change detection also reveals repricing behaviour β€” who follows whom, how fast, and with what magnitude.

Segment before aggregating. Category, price band, brand, and market. Aggregate positioning figures conceal the variation where the decisions actually are.

Distinguish position from strategy. Being 5% above a competitor is a fact. Whether that's correct depends on your differentiation, service, availability, and margin structure, none of which are in the scraped data.

Watch availability alongside price. A competitor undercutting you on an item they don't have in stock is not undercutting you.

Build alerting on what you'll act on. A competitor crossing a threshold on a key item warrants an alert. Every price change on every tracked product does not, and alert fatigue kills the programme.

Preserve the methodology in the output. A comparison figure should carry its definition β€” which price component, which market, which date, which matching confidence β€” or it will be used without those caveats.

Analysis Patterns That Produce Decisions

Collected price data supports several distinct analyses, and knowing which you're doing shapes what you need to store.

Price positioning. Where you sit relative to competitors across your catalogue, segmented by category, brand, and price band. The aggregate figure is nearly useless; the segmented view is where decisions live.

Repricing behaviour. Who changes prices, how often, by how much, and in response to what. Some competitors reprice algorithmically within minutes; others move quarterly. Knowing which is which changes how you respond to any single observation.

Follower and leader detection. When you change a price, who moves afterwards and how quickly? When a competitor moves, who else follows? This reveals the market's actual dynamics far better than static comparison, and it requires timestamped change data rather than snapshots.

Promotional calendar mapping. When competitors discount, by how much, on which categories, and for how long. Over a year this becomes a genuinely predictive dataset.

Price gap distribution. Not the average gap but its distribution. A mean gap of 2% could mean everything is close, or it could mean half your catalogue is 15% high and half is 11% low.

Availability-adjusted comparison. Filtering to items competitors actually have in stock. Out-of-stock undercutting isn't competition and including it distorts every conclusion.

Elasticity signals. Where you have your own sales data, correlating competitor price movements with your volume changes gives a rough sense of cross-price sensitivity. Crude and more useful than nothing.

Margin-aware positioning. Combining competitor prices with your own cost data to identify where you have room to move and where you don't. Scraped data alone can't tell you where to price; joined with internal data it can.

Alerting Without Fatigue

Price monitoring generates enormous volumes of change events, and an alerting strategy that fires on all of them gets muted within a week.

Alert on thresholds, not on changes. A competitor crossing below your price on a key item matters. A competitor adjusting by 0.3% does not.

Weight by commercial impact. Your top revenue items warrant tighter thresholds than the long tail. Most tracked products should generate no alerts at all in normal operation.

Alert on patterns, not just points. Three competitors moving on the same category in a day is more significant than one moving further.

Distinguish urgency levels. Something requiring action today should route differently from something worth reviewing this week.

Suppress known noise. Recurring promotional cycles, flash sales, and marketplace repricing churn produce predictable movement that shouldn't wake anyone.

Alert on data quality too. Extraction rate drops, implausible movements, and collection failures should reach someone, because silent degradation in a pricing dataset can cause real commercial damage before anyone notices.

Review alert usefulness periodically. If a class of alert has never resulted in an action, it should be a report rather than an alert.

Common Mistakes

Storing one price field. Throws away the components needed to answer the next question, and the next question is always "does that include shipping?"

Comparing unmatched products. A six-pack against a single unit, refurbished against new, a regional variant against the standard model. Silent, confident nonsense.

Collecting from one location. Produces a picture of one market presented as the market, and the error is invisible from inside the data.

Scraping listing pages instead of product pages. Listings frequently show "from" prices, omit shipping, and lag the product page.

Ignoring availability. An out-of-stock competitor at a lower price isn't competing, and including them distorts every aggregate.

Uncontrolled collection timing. Comparisons assembled from observations hours apart during a promotional window compare different moments.

Capturing the struck-through reference price. One of the most common extraction errors, and it inflates competitor prices systematically.

Locale-blind number parsing. European decimal conventions parsed with an English assumption produce errors of a thousandfold, which are at least obvious. The subtler variants aren't.

Collecting faster than prices change. Cost and noise without information.

Alerting on every change. Guarantees the alerting gets muted, at which point the programme's main output is unread.

No manual verification. Automated validation catches what you thought to check. A monthly manual check of a handful of products catches what you didn't.

Automating repricing without legal review. The one mistake in this list that can create genuine regulatory exposure rather than merely bad data.

A Realistic Build Sequence

Phase one β€” define what you're measuring. Which price component, tax treatment, shipping handling, quantity basis, and variant policy. Write it down. This is a commercial decision and it determines everything downstream.

Phase two β€” measure how fast prices actually move. Sample a set of products at high frequency for a week. The result sets your collection schedule and frequently surprises people in both directions.

Phase three β€” per-source proxy requirement testing. Datacenter first, five hundred requests, status distribution recorded. Split sources into permissive and demanding.

Phase four β€” extraction with validation. Structured data first, then internal endpoints, then DOM as a fallback. Assert on plausibility at extraction time. Verify a sample manually before scaling.

Phase five β€” product matching. Confidence-scored, with a persistent registry and a manual review process for the ambiguous band. Do this before scaling, since retrofitting matching to a large dataset is painful.

Phase six β€” storage with components separated. Raw responses retained, absence states explicit, timestamps and collection location on every record.

Phase seven β€” silent failure detection. Plausibility bands, extraction rate monitoring, implausible-movement gating.

Phase eight β€” analysis and threshold-based alerting, tuned to what people will actually act on.

Phases one and five are the ones that get compressed under time pressure, and they're the two that determine whether the data supports a pricing decision or merely describes one.

This is the use case where legal care matters most, because price monitoring sits close to areas competition regulators pay attention to.

  • Collecting publicly displayed prices is normal commercial practice and generally unproblematic in itself.
  • Competition law concerns arise around information exchange and coordination. Using monitoring data to inform your own independent pricing is ordinary business. Arrangements that facilitate alignment between competitors are not, and the line matters β€” particularly in concentrated markets.
  • Algorithmic pricing that responds to competitors has attracted regulatory attention in several jurisdictions. If you're building automated repricing, this is a conversation to have with counsel before deployment rather than after.
  • Terms of service on retail sites frequently prohibit automated collection. Contractual and commercial risk rather than criminal, but real.
  • Data protection law applies to any personal data collected incidentally, such as in reviews or seller information.
  • Rate-limit as a matter of conduct. Degrading a competitor's site is an unforced error regardless of legality.
  • Be accurate about what your data represents when it informs decisions. A comparison built on mismatched products or uncontrolled geography can lead to real commercial mistakes.

Not legal advice, and jurisdictions differ significantly. Of all the use cases in this field, this is the one where involving a lawyer early is most clearly warranted, especially if pricing responses are automated.

Frequently Asked Questions

How often should I check prices?

Measure how fast prices actually move in your category first. Collecting hourly in a category that reprices quarterly generates cost and noise; collecting weekly in a category that reprices hourly misses everything.

Do I need residential proxies?

Test per source. Retail and marketplace sites are among the more likely to block hosting ranges, and geographic accuracy is a correctness requirement for multi-market monitoring, so you'll escalate more often here than in general scraping.

Should I include shipping in comparisons?

Capture it separately and decide at analysis time. Landed cost is usually the comparable figure for consumers, but store the components so you can compute either.

How do I handle marketplace listings with multiple sellers?

Decide explicitly what you're tracking β€” buy-box price, lowest price, a specific seller, or the distribution β€” and hold that definition constant. Switching mid-series produces fake movement.

What about member or logged-in pricing?

It requires authenticated collection, which needs static addresses and raises terms-of-service questions. Many programmes deliberately monitor only public prices and document the limitation, which is a defensible position provided the limitation is stated rather than quietly ignored.

How do I stop product matching errors?

Confidence-scored matching, manual review of the ambiguous band, a persistent match registry, and monitoring your match rate. Expect this to be ongoing work rather than a build-phase task.

Why do my numbers differ from what I see on the site?

Usually geography, session state, or timing. Your browser has a session with a market and delivery destination set; a fresh collection may not. Verify what market your collection actually reached.

How do I handle products that competitors stock and I don't, or vice versa?

Record them anyway. Assortment gaps are one of the more valuable outputs of a price monitoring programme, and filtering to only matched products discards that entirely.

Should I monitor my own prices too?

Yes, from the same infrastructure and in the same market context. It catches your own pricing errors, regional misconfiguration, and cases where your displayed price differs from what you think it is β€” which happens more often than teams expect.

What if a competitor blocks me?

Work out whether it's rate limiting, classification, or fingerprint first. Halving concurrency and fixing headers costs nothing and resolves it more often than escalating the proxy tier. If those don't work, residential is the escalation, and if that fails the target may need a different approach entirely.

Can I automate repricing from this data?

Technically yes, and this is where competition law considerations become sharpest. Get legal advice specific to your market and market structure before deploying automated competitive repricing.


Getting the Collection Layer Right

Price monitoring depends on reaching the right market with a stable session, which makes proxy selection part of the data methodology. ProxyScrape's residential proxies provide country, state, and city-level targeting with sticky sessions long enough to hold a retailer's market and delivery context through a product sequence, which is what makes multi-market comparisons valid rather than approximate. For sources that testing shows don't check IP classification, their datacenter plans handle the same collection far more cheaply with unmetered bandwidth for image-heavy retail pages, and their price monitoring documentation covers the setup side.

β†’ Compare proxy options for multi-market price collection

The teams that get real commercial value from price monitoring are rarely the ones collecting the most products. They're the ones that decided which price component they were measuring and recorded the others separately, controlled geography and timing so their comparisons were comparisons, invested properly in product matching, and built detection for the failure mode where the pipeline keeps producing plausible numbers that happen to be wrong. Extraction is the easy part. Knowing that the number you extracted is comparable to the one you're comparing it against is the work.