SEO Tools

Event Schema Generator

Use this free Event Schema Generator to create valid Event JSON-LD structured data for concerts, conferences, classes, and webinars. Add your dates, venue, organiser, and ticket details, then copy markup that makes your page eligible for Google's event rich results. No sign-up required.

Dates and Venue Carousel Eligible 100% Free

Event Details

Event Status

Attendance & Location

Performer & Organizer

Tickets & Pricing

Schema Preview

No Schema added yet

Why You Are Here

Event still ships a full rich result

FAQ lost its in 2026. HowTo lost its in 2023. Event did not. Correctly marked-up events can appear in Google's event carousel, a scrollable row at the top of results showing the date, venue, and a ticket link for each event.

 That carousel surfaces for queries like concerts near me, conferences 2026, and artist or venue names. For anything date-bound, it is one of the highest-return markup types available.

The first situation is a venue, promoter, or organiser whose event pages carry no structured data, leaving the carousel out of reach entirely.

The second is diagnosing why events are not appearing. Usually the cause is one of the specific issues covered below: markup on the listing page rather than individual event pages, a missing timezone, or a recurring event described as one open-ended range.

The third is a site with an events calendar generating pages from a template, where the markup needs to be right once so it is right across hundreds of pages.

What This Tool Does

The Event Schema Generator builds valid Event JSON-LD from a simple form.

Choose your event type, enter the name, start and end dates with timezone, venue address, organiser, and ticket details, and the tool assembles correctly structured JSON-LD with Place, PostalAddress, and Offer nested properly, with the script tag included. Copy it and paste it into your page.

Everything runs in your browser. Nothing is uploaded or stored.

Only Three Properties Are Required

Event has one of the simplest requirement sets of any rich result type.

Property Status

name

REQUIRED

startDate

REQUIRED

location

REQUIRED

Miss any of the three and there is no eligibility at all. Include them and you are in, though a card built from three properties is thin. The recommended set is what makes it worth showing.

The Virtual Event Question

This deserves a straight answer because the guidance around it is muddled.

Google's documentation states that virtual experiences with no real-world component are not supported, and that events must take place in a physical location

That is the position for the event rich result.

At the same time, Schema.org fully supports VirtualLocation, the eventAttendanceMode property exists precisely to distinguish online from offline, and AI search systems parse virtual event markup without difficulty.

Your Event Carousel Eligible Worth Marking Up

Physical venue

Yes

Yes

Hybrid, physical and online

Yes, via the physical component

Yes

Online only, no physical component

NO

YES, for AI and other engines

The practical guidance

Mark up your webinar. It will not earn a Google event carousel slot, but AI assistants answering event questions increasingly draw on structured data, and other search engines have their own rules. What you should not do is expect the carousel and then wonder why it never appears.
For hybrid events, supply location as an array containing both a Place and a VirtualLocation. The physical component keeps carousel eligibility intact while the virtual one describes how remote attendees join.

Property Reference

Property Status Notes

name

REQUIRED

The event title

startDate

REQUIRED

ISO 8601 with timezone offset

location

REQUIRED

Place, VirtualLocation, or an array

endDate

Recommended

Same format as startDate

eventStatus

Recommended

Scheduled, cancelled, postponed, rescheduled

eventAttendanceMode

Recommended

Offline, online, or mixed

image

Recommended

Multiple aspect ratios preferred

description

Recommended

What the event is

offers

Recommended

Ticket price, currency, availability, URL

offers.price

Recommended

Number only, no symbol

offers.priceCurrency

Recommended

ISO 4217 code

offers.availability

Recommended

Schema.org URL value

offers.validFrom

Recommended

When tickets go on sale

performer

Recommended

Person or PerformingGroup

organizer

Recommended

Organization or Person

previousStartDate

Conditional

Required when rescheduled

isAccessibleForFree

Optional

True or false

maximumAttendeeCapacity

Optional

Venue or ticket capacity

The timezone offset is not optional in practice

Write 2026-09-15T09:00:00+05:00, not 2026-09-15T09:00:00. Without an offset, Google falls back to the timezone of the location you supplied, which is usually right but not always, and is guesswork you can simply remove.
If you do not know the start hour

Use a date alone rather than inventing a time. 2026-09-15 is valid for both startDate and endDate.

Event Subtypes

A specific subtype carries more meaning than the generic Event.

Event subType

Concert or gig

MusicEvent

Conference or summit

BusinessEvent

Theatre, dance, comedy

TheaterEvent

Sports fixture

SportsEvent

Exhibition or show

ExhibitionEvent

Festival

Festival

Course or class

EducationEvent

Screening

ScreeningEvent

Charity or fundraiser

SocialEvent

Sale or promotion

SaleEvent

Example schema

{
  "@context": "https://schema.org",
  "@type": "MusicEvent",
  "name": "Autumn Sessions: Live at the Bridgewater",
  "startDate": "2026-10-14T19:30:00+01:00",
  "endDate": "2026-10-14T22:30:00+01:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode":
    "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "Bridgewater Hall",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Lower Mosley Street",
      "addressLocality": "Manchester",
      "postalCode": "M2 3WS",
      "addressCountry": "GB"
    }
  },
  "image": [
    "https://example.com/images/event-1x1.jpg",
    "https://example.com/images/event-16x9.jpg"
  ],
  "description": "An evening of contemporary chamber music.",
  "performer": {
    "@type": "PerformingGroup",
    "name": "The Northern Quartet"
  },
  "organizer": {
    "@type": "Organization",
    "name": "Example Concerts",
    "url": "https://example.com"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/tickets/autumn-sessions",
    "price": "24.00",
    "priceCurrency": "GBP",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-07-01T09:00:00+01:00"
  }
}

Recurring Events

This is where a lot of event markup goes wrong.

Each occurrence needs its own Event block with its own specific dates

A weekly class running every Tuesday for twelve weeks is twelve Event objects, not one block spanning three months. Google's carousel surfaces individual occurrence cards, each linking to its own URL. One block describing a vague range gives it nothing specific to show.
What to avoid

• A single block with a start date in January and an end date in December
• Descriptions such as every Tuesday in place of actual dates
• One block reused for a whole season of events
What works

• One Event object per occurrence, each with exact startDate and endDate
• Its own page per occurrence where practical
• Past occurrences removed or updated rather than left indefinitely

Cancelled, Postponed, and Rescheduled Events

The instinct when an event is cancelled is to remove the date or delete the markup. Both are wrong.

Keep startDate and change eventStatus

startDate remains required regardless of status. Blanking it breaks the markup.
Situation eventStatus Also do

Going ahead

EventScheduled

Cancelled

EventCancelled

Keep the original startDate; point offers.url at a refund page

Postponed, new date unknown

EventPostponed

Keep the original startDate

Rescheduled

EventRescheduled

New date in startDate, old date in previousStartDate

Moved online

EventMovedOnline

Update eventAttendanceMode and location

Update it promptly. Google may keep showing a cancelled event as scheduled until the markup tells it otherwise, which sends people to an event that is not happening. Systematic date and status errors can also lead Google to stop trusting event markup across a whole domain.

Common Mistakes to Avoid

Putting the Markup on the Listing Page

Each card in Google's event carousel links to its own event URL, so the structured data has to live on the individual event page. Marking up a page that lists twenty upcoming events gives Google no distinct destination per event. Give each event its own page with its own Event block, and let the listing page simply link to them.
Omitting the Timezone Offset

A startDate such as 2026-09-15T09:00:00 with no offset leaves the time ambiguous. Google will fall back to the timezone of your location, which is usually correct but is an inference rather than a fact, and it fails outright if the location is imprecise. Always write the offset, and remember it shifts with daylight saving.
Blanking the Date When an Event Is Cancelled

Removing or emptying startDate on a cancelled event breaks the markup, because startDate is required regardless of status. The correct approach is to keep the original date and set eventStatus to EventCancelled, which tells Google exactly what happened and lets it update the display accordingly.

Quick Reference

Item Detail

Type

Event or a specific subtype

Rich result

Event carousel, fully supported

Required

name, startDate, location

Dates

ISO 8601 with timezone offset

No known start hour

Use a date alone

Online-only

No carousel, still worth marking up

Hybrid

location array, Place plus VirtualLocation

Recurring

One block per occurrence

Cancelled

Keep startDate, set eventStatus

Rescheduled

Add previousStartDate

Placement

Individual event pages, not listings

Price

Number only, currency separate

Frequently Asked Questions

What is an event schema generator?

An event schema generator is a free online tool that turns your event details into valid Event JSON-LD structured data. You enter the name, dates, venue, organiser, and ticket information, and this Event Schema Generator produces correctly structured Schema.org markup that makes your page eligible for Google's event rich results.

Which properties are required for Event schema?

Three: name, startDate, and location. Missing any one means no eligibility at all. Beyond those, endDate, eventStatus, eventAttendanceMode, image, description, offers, performer, and organizer are all recommended and are what make the resulting card worth showing.

Can I use Event schema for a webinar or online-only event?

You can and should, but with realistic expectations. Google's documentation says virtual experiences with no real-world component are not supported for the event rich result, so an online-only event will not earn a carousel slot. The markup is still worth adding, because AI assistants and other search engines parse event structured data and increasingly source event information from it.

How do I mark up a recurring event?

Create a separate Event block for each occurrence, each with its own exact start and end dates. A class running weekly for twelve weeks needs twelve Event objects, not one spanning the whole term. Google's carousel surfaces individual occurrence cards linking to their own URLs, so a single vague date range gives it nothing specific to display.

What should I do when an event is cancelled?

Keep the original startDate in the markup and set eventStatus to EventCancelled. Do not delete the date or remove the markup, since startDate remains required regardless of status. If you have a refund or rebooking page, point the offers URL at it. Update promptly, because Google may keep showing the event as scheduled until the markup says otherwise.

Do I need to include the timezone in the date?

Yes, in practice. Write the full offset, as in 2026-09-15T09:00:00+05:00. Without it, Google falls back to the timezone of the location you supplied, which is an inference rather than a stated fact. Remember the offset changes with daylight saving, so the same venue may need a different offset in summer and winter.

Where should the Event markup go?

On the individual event page, not on a listing page showing many events. Each card in Google's event carousel links to its own URL, so every event needs its own page carrying its own Event block. A calendar or listing page should link to those individual pages rather than trying to describe them all in one place.

How do I mark up a hybrid event with both a venue and a livestream?

Set eventAttendanceMode to MixedEventAttendanceMode and supply location as an array containing both a Place object with the physical address and a VirtualLocation object with the streaming URL. The physical component keeps carousel eligibility intact. Markup from this Event Schema Generator supports both location types together.

Comments

Login to leave a comment

No comments yet. Be the first to comment!