Event Schema Generator
Type in your event name, date, venue and ticket link. The tool writes the code that gets your event into Google's event listings and Maps, instead of leaving it buried on a page nobody finds.
Your details
Google result preview
Events also feed Google Maps and the events carousel
Your event name appears here
Your event description appears here.
Paste the block anywhere inside <head> or <body>, then confirm it parses with the schema validator.
Short answer
Event schema is a block of JSON-LD structured data stating the facts of an event plainly: its name, when it starts, where it happens and what tickets cost. It makes the page eligible for Google's event experience in Search and Maps, including the carousels that answer queries like "things to do this weekend". Google requires name, startDate and location. The part most hand-written markup gets wrong, and the reason events belong in alocal SEO audit rather than a content pass, is hybrid events, which need both a Place and a VirtualLocation supplied together as an array. Dates need ISO 8601 with a timezone offset, or Google may place your event hours from where you meant it.
What Event schema gets you
Search "things to do in Bristol this weekend" and Google does not hand back ten links. It shows a carousel of actual events with dates, venues and ticket buttons. Getting into that carousel has almost nothing to do with how well your event page ranks. It depends on whether Google can tell the page describes an event at all.
Event schema is how you tell it. It states the facts directly rather than leaving Google to work out which of the four dates on your page is the one that matters.
- Eligibility for the event experience in Google Search
- Inclusion in Google Maps for events with a physical venue
- Placement in the event carousels for location and date queries
- A ticket link, a price and a date shown before anyone clicks through
For anything ticketed, that listing is usually worth more than the ranking position of the page, because it puts your date and your ticket link in front of somebody who has already decided to go out.
Attendance mode, and why hybrid events break
Attendance mode determines what kind of location Google expects, and mismatching the two is the most common reason event markup validates but does nothing.
| Attendance mode | Location required | Common mistake |
|---|---|---|
| OfflineEventAttendanceMode | A Place with a full PostalAddress | A venue name with no address, which Google cannot map |
| OnlineEventAttendanceMode | A VirtualLocation with a url | Supplying a physical venue anyway, which contradicts the mode |
| MixedEventAttendanceMode | Both, as an array of Place and VirtualLocation | Supplying only one of the two, so half the event is invisible |
What this tool does for you
Pick the mixed mode and fill in both a venue and a stream URL, and the generator emits the location array in the shape Google expects. That structure is the single thing hand-written hybrid markup most often gets wrong.
How to mark up an event
Six steps. Step two is where the largest number of real-world event listings go wrong, because a time without a timezone is a guess.
- 01
Name the event the way people search for it
The name property is what appears in the listing. Use the name the event is actually known by, including the year or the edition if that is how people refer to it, and leave the marketing tagline for the description.
- 02
Set the start date with a timezone offset
ISO 8601, including the offset when the event has a specific start time: 2026-04-16T09:00:00+01:00. A time with no offset is ambiguous, and Google may place your event several hours from where you meant it.
- 03
Pick the attendance mode before filling in locations
Offline needs a Place. Online needs a VirtualLocation. Mixed needs both, supplied as an array, and that array is what most hand-written hybrid markup gets wrong.
- 04
Give the full postal address, not just the venue name
A Place with a name and no address is much weaker than one with street, locality, postal code and country. The address is how Google connects your event to a map pin and to location-based queries.
- 05
Add an offer even when the event is free
A price of 0 with a currency is an explicit statement that entry is free, which Google can surface. Omitting the offer just means it does not know, and free events that say so tend to earn better click-through.
- 06
Keep eventStatus current after anything changes
Postponed, rescheduled, cancelled and moved online are all values. Update the status and keep the page live rather than deleting it, because deletion leaves stale results circulating for weeks.
Keeping the markup true after things change
Event markup goes stale faster than any other type, and stale event data is worse than none. A sold-out event still advertising tickets, or a rescheduled one still showing last month's date, damages trust in a way a missing listing does not.
When the date moves
Set eventStatus to EventRescheduled, put the new date in startDate, and add previousStartDate with the old one. Google can then tell searchers the date changed rather than quietly showing a different day.
When it is cancelled
EventCancelled, original startDate intact, page still live. Deleting the page is the worst option available: the old listing keeps circulating with nothing to correct it.
When tickets sell out
Change offers.availability to SoldOut. An event still showing tickets on sale after they have gone is the fastest way to make a listing actively harmful.
Generate it from the same source as the page
If dates or availability can change, render the JSON-LD from the same data your page renders from, rather than pasting a static block that will drift. When it is live, confirm it parses with the schema validator.
What this tool generates
Twelve event types
Business, music, sports, theatre, festival and more
Attendance mode
Offline, online or mixed, with matching location nodes
Hybrid location array
Place and VirtualLocation together, as Google expects
Event status
Scheduled, postponed, rescheduled, cancelled, moved online
Organiser
An Organization node with a name and a URL
Ticket offer
Price, currency, availability, ticket URL and on-sale date
A time without a timezone is a guess
Frequently asked questions
What does Event schema get me in search?
Eligibility for the event experience in Google Search and Google Maps: a date, a venue and a ticket link surfaced directly in results, plus inclusion in the event carousels that appear for queries like 'things to do in Bristol this weekend'. For anything ticketed, that visibility usually matters more than the ranking position of the page itself.
Which fields does Google actually require?
Name, startDate and location. Everything else is recommended, but recommended understates it: without an image, an organiser and an offer with a price, your listing loses to the ones that have them. Fill in as much as is genuinely true.
How do I mark up a hybrid event?
Set eventAttendanceMode to MixedEventAttendanceMode and supply both a physical venue and a stream URL. Google then expects location to be an array holding a Place and a VirtualLocation together. This tool builds that array automatically when you pick the hybrid mode and fill in both, which is the part most hand-written markup gets wrong.
What format do the dates need to be in?
ISO 8601. The date pickers here emit that shape for you. If you hand-edit afterwards, include the timezone offset whenever the event has a specific start time, for example 2026-04-16T09:00:00+01:00. A bare date with no time is valid for all-day events, but a time with no offset is ambiguous and Google may read it in the wrong zone.
My event was cancelled. Do I delete the markup?
No, and this is the one case where leaving the page up matters. Change eventStatus to EventCancelled and keep the page live with the original startDate. That is how Google learns to stop showing it as upcoming and to tell people searching for it that it is off. Deleting the page leaves stale results in circulation for weeks.
What is the difference between postponed and rescheduled?
EventPostponed means the event is off for now with no new date, and you keep the original startDate in place. EventRescheduled means a new date exists: set startDate to the new one and add previousStartDate with the old one, so Google can tell people the date moved rather than silently showing a different day.
Can one page carry multiple events?
Yes, as an array of Event objects, and that is correct for a listings page showing a season of dates. This generator produces one event at a time, which is right for a dedicated event page. For a multi-date listing, generate each one and combine them into an array, or mark up each date's own page separately.
Do I need an offer if the event is free?
Include one with a price of 0 and the currency set. That is an explicit signal the event is free, which Google can surface. Omitting the offer entirely just means it does not know, and free events that say so tend to draw better click-through than ones leaving people to guess.
Which event type should I choose?
The most specific one that fits: MusicEvent for a gig, BusinessEvent for a conference, TheaterEvent for a play, EducationEvent for a workshop. They all inherit from Event, so the generic type is never wrong, but the specific one gives Google more to work with in categorised results.
Should the organiser be a Person or an Organization?
Organization for a company, a venue or a promoter, which covers most events. Person is valid for an individual running their own event. Include the organiser's URL either way, because it links the event to an entity with a history rather than leaving it as a name.
Does the ticket URL have to be on my own site?
No. Point offers.url at wherever tickets are actually sold, including a third-party ticketing platform. Sending people to a page that then sends them somewhere else adds a step and a chance to lose them.
Why is my event not showing in Google's event results?
The usual reasons are a missing or malformed startDate, a location that resolves to nothing Google recognises, an event already in the past, or markup that does not match what the page displays. Eligibility is also discretionary: correct markup makes you a candidate rather than a guaranteed listing.
Other schema tools
Local Business Schema Generator
Tell Google your business name, address, phone, and opening hours in the format it reads literally. Type your details, copy the code, paste it into your site.
Use toolProduct Schema Generator
Give Google your price, stock status, and star rating so they can show under your listing in search. Fill in the product details, copy the code.
Use toolFAQ Schema Generator
Mark up your questions and answers so search engines and AI assistants can lift them as direct answers. Unsupported HTML is stripped for you.
Use toolBreadcrumb Schema Generator
Replace the raw URL under your search result with a readable trail like Home > Guides > Technical SEO. Enter each level, copy the code.
Use toolArticle Schema Generator
Tell Google who wrote your article, when, and for whom. The author link is the part that carries E-E-A-T, and most sites leave it out.
Use toolRead up on structured data
A tool tells you what is wrong. These explain what to do about it.
The Complete Local SEO Audit Guide (with Checklist)
Read guideGoogle Killed FAQ Rich Results (May 2026): The Hot Take That Replaces Them Is Wrong Too
Read guideEcommerce SEO Checklist 2026 (Free Template, Complete Store Optimization)
Read guideTerms this tool checks
- Schema Markup
Schema markup is a standardized vocabulary (developed by Schema.org and supported by Google, Bing, Yahoo, and Yandex) used to annotate web content with structured data.
- Structured Data
Structured data is code (typically JSON-LD format) added to web pages that helps search engines understand the content in a machine-readable way.
- Rich Results
Rich results (formerly called rich snippets) are enhanced search result formats that display additional visual information beyond the standard title, URL, and description.
Every event page, checked in one crawl
CrawlRaven crawls your whole site, validates the structured data on every page, and joins it to Search Console so you know which broken markup is costing you actual impressions.