Skip to content
SEO Madmanby Adam Hafez
Free tool

Event schema validator for required fields and dates

Event schema validator: check Event JSON-LD for Google's required fields, UTC offsets, eventStatus and priceCurrency. Free, runs in your browser.

Runs entirely in your browser. Nothing you enter is uploaded, logged or stored.

Parsed with the browser's own JSON.parse against Google's documented property tables for Event. Nothing you type is sent anywhere.

Key takeaways

  • Google documents four required Event properties, name, startDate, location and location.address, and treats offers, organizer and performer as recommended.
  • Google says to specify the timezone by including the UTC or GMT offset, and uses the event location's timezone when none is given.
  • Google lists four eventStatus values, EventScheduled, EventCancelled, EventPostponed and EventRescheduled, and assumes EventScheduled when the field is absent.
  • When an event is cancelled or postponed, Google says to keep startDate and location rather than remove them.
  • This checker reads only the JSON-LD typed in and cannot confirm that the event page is crawlable or that the dates are true.

What it takes

  • A pasted Event JSON-LD object

More tools

All of them free, all of them browser-only.

Browse the tools

How to use it

  1. 1Paste the Event JSON-LDCopy the contents of the script tag with type="application/ld+json" that describes the event, not the surrounding page markup.
  2. 2Fill the four required fieldsname, startDate, location and location.address are the properties Google documents as required for an Event.
  3. 3Add a UTC offset to startDateWrite the date and time with an offset such as +01:00, or use a date-only value for an all-day event.
  4. 4Use a documented eventStatusChoose one of EventScheduled, EventCancelled, EventPostponed or EventRescheduled, and add previousStartDate when rescheduling.
  5. 5Check the offers blockGive the ticket price a three-letter ISO 4217 priceCurrency and a landing page URL, then recheck for remaining recommended gaps.

What this Event schema validator checks

Every rule comes from Google’s Event structured data page. The tool parses the pasted JSON with JSON.parse, finds the first node whose @type is Event, and reports a row for each check:

  • Four required properties. name, startDate, location and location.address. A missing one is a Problem.
  • Recommended properties. description, endDate, eventStatus, image, location.name, offers and its price, priceCurrency, availability, url and validFrom, organizer and performer. A missing one is Info.
  • startDate carries a UTC offset. Google says to “specify the timezone by including the UTC or GMT time offset”. The tool passes a value ending in Z or an offset such as -05:00, and a date-only value, which Google shows as the form for an all-day event.
  • eventStatus is a documented value. Either the bare name or the full schema.org URL of one of the four documented statuses passes.
  • previousStartDate for a rescheduled event. Checked only when the status is EventRescheduled.
  • offers.priceCurrency is a 3-letter code. Google documents priceCurrency as an ISO 4217 code.

How to read the results

Pass means the rule is met. Problem marks a missing required property, and Google says the required properties must be included for the content to be eligible for display. Warning marks a value that exists but breaks a documented format: a startDate without an offset, an undocumented eventStatus, or a currency that is not three uppercase letters. Info marks a recommended property you have not added.

Treat the Info rows as a to-do list, not a failure. Google says the recommended properties add information that “could provide a better user experience”, and notes that it “only shows a snippet of the full description”, so keep the description focused on the event itself.

Worked example

Take the example the tool loads with and change two values: set startDate to “2026-11-12T19:00” and eventStatus to “https://schema.org/EventRescheduled”. The tool returns:

  • @type is Event and all four required properties: Pass.
  • description, organizer, performer: Info, “Missing”.
  • startDate carries a UTC offset: Warning, showing “2026-11-12T19:00”.
  • eventStatus is a documented value: Pass.
  • previousStartDate for a rescheduled event: Info, “Missing”.
  • offers.priceCurrency is a 3-letter code: Pass, “EUR”.

Put “+01:00” back on startDate and add previousStartDate, and only the three recommended gaps remain.

Common mistakes it catches

  • A start time with no offset. Google’s example is an event at 7pm in New York written as “2019-09-05T19:00:00-05:00” during standard time.
  • A made-up status. Values such as “Cancelled” or “SoldOut” are not among the four Google lists.
  • A reschedule with no history. Google says to update startDate and endDate to the new dates, and you can add previousStartDate for the old one.
  • A currency symbol or name. ”$” or “euro” fails the three-letter check; write USD or EUR.

Some rules need a human. Google says not to mark up non-events such as trip packages, business hours, coupons or “buy your tickets now” offers, that each event needs its own URL, and that the event experience only supports pages focused on a single event.

Sources

  1. 1.Event structured data - Google Search CentralPrimary

Frequently asked questions

Is offers required for an Event?

No. Google lists offers and its sub-properties as recommended, so a missing offers block is flagged here as Info.

Why does a missing timezone offset matter?

Google's documentation says to include the UTC or GMT offset. Without one, Google uses the timezone of the event's location, so a missing or vague location leaves the real start time open to guesswork.

Can the JSON-LD be inside an @graph?

Yes. This checker looks through a single object, a top-level array or an @graph list for the first node whose @type is Event.

Should I delete a cancelled event's markup?

Google says to keep all values as they were, including startDate and location, and change eventStatus to EventCancelled. The startDate helps identify the unique event.

Can one Event cover several performances?

Google says that if there are several performances on different days, each with its own tickets, you should add a separate Event element for each performance.