What Is PriceValidUntil in Product Schema?
PriceValidUntil is an Offer property that states the date or date-time after which the stated price is no longer available.
It creates an explicit boundary around a temporary price. The property does not describe product expiration, inventory availability, coupon validity or the life of the page. It belongs with the price it limits, normally inside the same Offer object, so systems can interpret the amount, currency and end of validity as one commercial fact.
- Frame the decision raised by What Is PriceValidUntil in Product Schema.
- Confirm its value type and the object it describes.
- Compare the markup with visible page information.
- Correct the source data or template without inventing values.
- Validate the rendered result and monitor future changes.
| Field | Question answered | Example |
|---|---|---|
| price | What amount is charged? | 79.99 |
| priceCurrency | Which currency applies? | USD |
| priceValidUntil | When does that price end? | 2026-11-30 |
| availability | Can this Offer be purchased? | InStock |
- Use it only when the price has a real end boundary.
- Keep it inside the relevant Offer.
- Update or remove it when the price changes.
Use the free backlink checker to inspect links reaching high-value offer pages.
PriceValidUntil is accurate only when it limits the exact price shown by the same Offer.
The decision for What Is PriceValidUntil in Product Schema should rest on live, traceable evidence and a verified follow-up check.
When Should You Use PriceValidUntil?
Use priceValidUntil when a current price has a known, truthful end date, such as a scheduled sale or a time-bounded promotional offer.
Do not add an arbitrary future date to satisfy a validator or make a price look fresh. An ordinary ongoing price may not have a defined end, and a property that is continually pushed forward without a business event is not meaningful. The end date should come from promotion or pricing systems that actually control checkout.
- Evidence for When Should You Use PriceValidUntil: the live structured-data entity and property relationship
- The expected value type and any nested object
- Visible page information that supports the structured value
- Related offer or catalog fields needed for interpretation
- A fresh validation result after the page changes
| Pricing case | Use property? | Reason |
|---|---|---|
| Scheduled weekend sale | Yes | End is known |
| Holiday price with fixed deadline | Yes | Offer has a real boundary |
| Everyday price | Usually no | No defined expiry |
| Coupon requiring a code | Review scope | Displayed Offer may not apply universally |
| Member-only price | Model eligibility separately | Audience and duration are different facts |
- Confirm the amount is currently active.
- Verify the end time in the pricing source.
- Check that the visible page explains the same sale.
- Attach the date to the correct Offer.
- Schedule the transition after expiry.
The property should follow commercial truth, not become a recurring SEO timestamp.
Use priceValidUntil for real time-bounded prices and omit it when no defensible end date exists.
The decision for When Should You Use PriceValidUntil should rest on live, traceable evidence and a verified follow-up check.
What Date Format Should PriceValidUntil Use?
PriceValidUntil should use ISO 8601 as a date or date-time, with an explicit time and UTC offset when the precise end moment matters.
A date-only value can be adequate when the offer ends at the close of a clearly defined business day, but global commerce introduces ambiguity about whose midnight applies. A date-time such as 2026-11-30T23:59:59-05:00 identifies the exact Eastern Time boundary and behaves predictably across systems.
- Frame the decision raised by What Date Format Should PriceValidUntil Use.
- Confirm its value type and the object it describes.
- Compare the markup with visible page information.
- Correct the source data or template without inventing values.
- Validate the rendered result and monitor future changes.
| Value | Interpretation | Use |
|---|---|---|
| 2026-11-30 | Calendar date | When day-level precision is sufficient |
| 2026-11-30T23:59:59-05:00 | Exact local moment with offset | Scheduled US promotion |
| 2026-12-01T04:59:59Z | Exact UTC moment | Normalized system output |
| 11/30/2026 | Ambiguous regional format | Do not use |
| End of month | Free text | Do not use |
- Store the source timezone with promotion data.
- Convert dates without changing the actual instant.
- Test daylight-saving boundaries.
- Keep visible countdowns synchronized to the same clock.
The chosen representation must preserve the commercial end moment, not merely pass a format check.
ISO 8601 with a timezone provides the safest price boundary whenever hour-level precision affects checkout.
The decision for What Date Format Should PriceValidUntil Use should rest on live, traceable evidence and a verified follow-up check.
Where Does PriceValidUntil Belong in JSON-LD?
PriceValidUntil belongs directly on the Offer whose price expires; it should not be placed on Product or attached to a different seller, variant, currency, or price.
Offer scope matters because the same Product can have several sellers or promotions. One merchant's sale deadline cannot describe another merchant's standard price. If a sale price is modeled within a PriceSpecification, use validity properties supported by that node rather than moving priceValidUntil there without checking the type contract.
- Evidence for Where Does PriceValidUntil Belong in JSON-LD: the live structured-data entity and property relationship
- The expected value type and any nested object
- Visible page information that supports the structured value
- Related offer or catalog fields needed for interpretation
- A fresh validation result after the page changes
| Location | Correct? | Reason |
|---|---|---|
| Offer with current sale price | Yes | Amount and end date stay paired |
| Product root | No | Product identity is not a price |
| Unrelated seller Offer | No | Commercial scope differs |
| PriceSpecification | Use validThrough instead | Property contracts differ |
- Map each Product and seller.
- Identify every Offer.
- Pair price, currency and expiry at the same node.
- Use one stable URL for that Offer.
- Validate the rendered entity graph.
This placement makes it possible to audit one commercial claim without inferring relationships from page layout.
Keep priceValidUntil on the exact Offer that owns the expiring price and nowhere broader.
The decision for Where Does PriceValidUntil Belong in JSON-LD should rest on live, traceable evidence and a verified follow-up check.
How Is PriceValidUntil Different From ValidThrough?
PriceValidUntil specifically ends an Offer price, while validThrough is a broader validity-end property that can describe an Offer or PriceSpecification; choose based on the node and fact being bounded.
Both can help express a sale end on an Offer, but they are not interchangeable everywhere. PriceValidUntil communicates the narrow pricing intent clearly. A PriceSpecification can use validFrom and validThrough to define its own active period. Do not publish two conflicting end dates for the same amount.
- Frame the decision raised by How Is PriceValidUntil Different From ValidThrough.
- Confirm its value type and the object it describes.
- Compare the markup with visible page information.
- Correct the source data or template without inventing values.
- Validate the rendered result and monitor future changes.
| Property | Primary scope | Best use |
|---|---|---|
| priceValidUntil | Offer | End of current Offer price |
| validThrough | Offer or PriceSpecification | End of entity or specification validity |
| validFrom | Offer or PriceSpecification | Start of active period |
| availability | Offer | Purchasability, not price duration |
- Choose one source of truth for the sale period.
- Ensure start is not later than end.
- Avoid duplicate properties with different timestamps.
- Use the property supported by the node being described.
Modeling clarity is more important than populating every possible temporal field.
Use priceValidUntil for a price-specific Offer deadline and validThrough when the validity boundary belongs to the broader node or PriceSpecification.
The decision for How Is PriceValidUntil Different From ValidThrough should rest on live, traceable evidence and a verified follow-up check.
How Should Sale Start and End Dates Work Together?
A scheduled sale should pair validFrom with priceValidUntil or validThrough so the promotional price has a clear start, end, timezone, and transition back to the next valid price.
The page must not expose a future sale price before its start or leave it active after its end. Pricing engines, caches, feeds and JSON-LD should transition together. A midnight cron job is insufficient when campaigns span US time zones or end at a precise hour.
- Evidence for How Should Sale Start and End Dates Work Together: the live structured-data entity and property relationship
- The expected value type and any nested object
- Visible page information that supports the structured value
- Related offer or catalog fields needed for interpretation
- A fresh validation result after the page changes
| Phase | Visible price | Structured state |
|---|---|---|
| Before validFrom | Regular current price | Do not publish future sale as active |
| During sale | Sale price and terms | Include start and end |
| At end instant | Transition immediately | Remove or replace expired price |
| After sale | Next valid price | No past deadline attached to current amount |
- Store campaign start, end and timezone.
- Generate visible and structured prices from one source.
- Invalidate page and edge caches at both boundaries.
- Update feeds within the same operational window.
- Verify before, during and after the transition.
The strongest test observes an actual scheduled change rather than a static example.
Sale dates are trustworthy only when every customer-facing system changes price at the same defined instants.
The decision for How Should Sale Start and End Dates Work Together should rest on live, traceable evidence and a verified follow-up check.
How Should PriceValidUntil Work With Product Variants?
Each variant Offer needs its own priceValidUntil when price or promotion timing differs, and parent-level inheritance is safe only when every represented child shares the exact amount and deadline.
Promotions often exclude colors, sizes, storage capacities or sellers. A page may display “from” pricing while only one child receives the discount. Copying that child's deadline and price across the product group creates false offer data. The selected variant's rendered markup must retain its SKU, amount, currency, availability and deadline together.
- Frame the decision raised by How Should PriceValidUntil Work With Product Variants.
- Confirm its value type and the object it describes.
- Compare the markup with visible page information.
- Correct the source data or template without inventing values.
- Validate the rendered result and monitor future changes.
| Variant case | Deadline handling | Risk |
|---|---|---|
| All variants share sale | Common source may generate each Offer | Confirm every child |
| Only selected colors discounted | Deadline on eligible Offers | Parent overclaims |
| Different sellers | Separate dates by seller Offer | Merchant terms mixed |
| Client-side selector | Update all linked fields | Stale default markup |
- Map the Product variant group.
- Join promotion eligibility to child identifiers.
- Keep price and expiry on the same Offer.
- Test excluded and unavailable variants.
Never infer campaign coverage from a parent banner when the pricing source applies rules at child level.
Variant price deadlines must follow promotion eligibility at the exact SKU and Offer granularity.
The decision for How Should PriceValidUntil Work With Product Variants should rest on live, traceable evidence and a verified follow-up check.
What PriceValidUntil Mistakes Are Common?
Common mistakes include publishing past dates, inventing rolling deadlines, omitting timezones, attaching one deadline to mixed offers, and failing to remove an expired sale price.
Another failure is treating priceValidUntil as a product freshness date. Automatically setting it to 30 days from every crawl does not describe a real commercial boundary. Static caches can also preserve the old amount and date after checkout changes, producing contradictory evidence across the same URL.
- Evidence for What PriceValidUntil Mistakes Are Common: the live structured-data entity and property relationship
- The expected value type and any nested object
- Visible page information that supports the structured value
- Related offer or catalog fields needed for interpretation
- A fresh validation result after the page changes
| Mistake | Root cause | Durable fix |
|---|---|---|
| Past date with active price | Expiry job failed | Transition and invalidate caches |
| Rolling future date | SEO placeholder | Remove fabricated boundary |
| Timezone omitted | Local clock assumption | Store precise offset |
| One date for all variants | Parent inheritance | Generate per eligible Offer |
| Page and checkout differ | Disconnected price systems | Choose authoritative source |
- Trace amount and deadline to the pricing source.
- Compare timestamps across page, feed and checkout.
- Fix the transition or mapping.
- Purge affected caches safely.
- Verify the live page after the deadline.
A valid date format cannot compensate for a false or stale sale claim.
Price deadline errors require commercial-source and transition fixes, not cosmetic JSON-LD edits.
Start with a relevant free SEO check, continue the evidence workflow in Novaverb, and review pricing when comparing continuous monitoring with a one-time manual review.
The decision for What PriceValidUntil Mistakes Are Common should rest on live, traceable evidence and a verified follow-up check.