SchemaForAI
Ad

Free Event Schema Generator for AI Search

Generate JSON-LD Event schema with venue, organizer, and ticket info. Optimized for Google Event rich results, ChatGPT, and Perplexity. No sign-up.

Event Details

Event Schema

The name of the event.

Use a specific, unique name — generic names like 'Annual Conference' fail to match user intent.

Minimum 50 characters.

0 / 1500

AI calendars and event finders read this first. Include the main theme, audience, and any headliners.

ISO 8601 date-time with timezone offset.

Include the timezone offset — without it, AI assistants guess wrong for users in other timezones.

ISO 8601 date-time with timezone offset.

Current state of the event.

How attendees participate.

Name of the venue (or 'Online' for virtual events).

Street address (for in-person/hybrid events).

Two-letter ISO country code.

For online/hybrid events — the join URL.

Promotional image for the event (optional).

The organization or person hosting the event.

Organizer's website (optional).

Ticket price (use 0 for free events).

Where tickets are sold.

When tickets first become available (optional).

JSON-LD
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Event name",
  "description": "What the event is about…",
  "startDate": "2026-06-15T09:00:00-07:00",
  "endDate": "2026-06-16T17:00:00-07:00",
  "location": {
    "@type": "Place",
    "name": "Venue"
  },
  "organizer": { "@type": "Organization", "name": "Organizer" }
}

AI Readiness Score

Get a 0–100 score showing how likely AI search engines are to parse and cite content from your page.

How to use this code:

  1. Copy the JSON-LD code above
  2. Paste inside <script type="application/ld+json">
  3. Add the script tag to your event page <head>
  4. Validate with Google Rich Results Test ↗
AI Simulator

See how ChatGPT answers — with and without your schema

Side-by-side comparison of what an AI assistant would return for a typical event query, with vs. without the structured data you generated above.

3 of 3 remaining today

Sample user query

When is this event and how do I attend?

Without Schema
Generic answer

Click Simulate to see the AI response without schema.

With Schema
Detailed citation

Click Simulate to see the AI response with schema.

Install Guide

How to install this schema on your site

Pick your platform. Every step includes a copy-paste-ready code block where it applies.

  1. 1

    Install and activate a schema plugin: "Rank Math SEO", "Yoast SEO Premium", or "Schema Pro". For straight JSON-LD injection without a full SEO plugin, "WPCode" (formerly Insert Headers and Footers) is the simplest option.

  2. 2

    In Rank Math: go to the post edit screen → Rank Math sidebar → Schema tab → Schema Builder → paste your JSON-LD. In Yoast Premium: the Schema tab auto-generates standard types; use the Custom Schema plugin add-on to inject custom types.

  3. 3

    For WPCode: Code Snippets → Add Snippet → Custom Code (HTML/PHP) → paste the full <script type='application/ld+json'> tag. Set Location to 'Site Wide Header' or 'Specific Post/Page' depending on scope.

    html
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [ /* your Q&A pairs */ ]
    }
    </script>
  4. 4

    Publish the post. Open the live URL, view source, confirm the <script type="application/ld+json"> tag appears in the <head>.

  5. 5

    Validate at search.google.com/test/rich-results.

What is Event Schema?

Event is the Schema.org type for things that happen at a scheduled time and place — conferences, concerts, classes, sporting events, meetups, lectures, webinars, festivals. It binds together four core entities: what is happening (name, description, image), when (startDate, endDate, eventStatus), where (location, either a physical Place or a VirtualLocation), and who organizes or runs it (organizer Organization or Person).

The schema also supports commercial details via offers — ticket price, currency, availability, and purchase URL. For free events, use price: 0. For multi-tier ticketing, use an array of Offer objects (general admission, VIP, student). The result is a complete, machine-readable description that AI event assistants, Google's Event rich results, and aggregators like Eventbrite, Facebook Events, and Bandsintown can all consume.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "AI Search Summit 2026",
  "startDate": "2026-06-15T09:00:00-07:00",
  "endDate": "2026-06-16T17:00:00-07:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode":
    "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "Moscone Center",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "747 Howard St",
      "addressLocality": "San Francisco",
      "addressRegion": "CA",
      "postalCode": "94103",
      "addressCountry": "US"
    }
  },
  "organizer": {
    "@type": "Organization",
    "name": "Acme Conferences"
  },
  "offers": {
    "@type": "Offer",
    "price": "299.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/tickets"
  }
}
</script>
Ad

Why Event Schema Matters for AI Discovery

Event discovery is one of the most AI-native query classes. When users ask "what concerts are happening this weekend near me," "AI conferences in 2026," or "what classes can I take on weekends," AI engines don't scrape HTML pages — they query their internal event graph, which is populated almost entirely from Event schema across the web. Events without structured data essentially don't exist from an AI-discovery standpoint.

What AI engines use Event schema for, specifically:

  • Time-scoped retrieval: "Events this weekend" gets filtered by startDate/endDate. Events with fuzzy or missing dates are excluded.
  • Geo-scoped retrieval: "In San Francisco" gets filtered by location.address. Virtual events surface in timezone-matched virtual event queries.
  • Category-scoped retrieval: Event subtypes (MusicEvent, SportsEvent, BusinessEvent, EducationEvent) let AI engines serve category-specific queries more precisely.
  • Ticket-availability filtering: "Find events with tickets still available" uses offers.availability to exclude sold-out events.
  • Price-tier filtering: "Free events" and "events under $50" use offers.price — events without offers aren't included.
  • Cancellation awareness: AI engines stop recommending events marked EventCancelled, but can still answer "was the event cancelled" queries.

The practical consequence: if you run a venue, put on events, teach classes, or organize conferences, Event schema determines whether AI-curious attendees find you at all. This matters especially in 2026 as AI-powered discovery replaces Facebook Events and generic calendar searches for an increasing share of users.

Event Schema Best Practices

Always include timezone in dates

Every startDate and endDate must have an offset. Timezone-less dates cause incorrect surfacing for users outside the organizer's timezone.

Use the most specific event subtype

MusicEvent for concerts, SportsEvent for games, BusinessEvent for conferences. Specificity unlocks category-filtered queries.

Declare attendance mode explicitly

Don't leave AI engines to guess virtual vs. in-person. Set eventAttendanceMode every time.

Use VirtualLocation for online events

Link the join URL via VirtualLocation.url. Don't treat a Zoom link as a regular location.

Update eventStatus for changes

Postponed, cancelled, moved online — update the status immediately rather than stealth-editing dates.

Include Offer even for free events

price: 0 with a registration URL is better than no Offer at all.

One page per event

Dedicated URLs per event let AI engines cite individual events in specific queries. Listing pages fragment authority.

Link organizer to Organization schema

When the organizer is an entity you've declared elsewhere, use @id or sameAs to merge identities.

How to Install Event Schema

Event management platform (Eventbrite, Facebook Events)

  1. 1These platforms expose public event pages with their own built-in Event schema — you don't need to add your own on their pages.
  2. 2However, if you maintain a dedicated event page on your own site, add Event schema there too, with your page URL as the canonical.
  3. 3Use sameAs to link your on-site event page to the Eventbrite/Facebook event, merging identity across platforms.
  4. 4AI engines often prefer your own domain's event page over aggregator pages.

WordPress

  1. 1Plugins like The Events Calendar (by Modern Tribe) auto-generate Event schema from your event listings.
  2. 2Verify the schema includes offers and eventAttendanceMode — not all Event calendar plugins emit these.
  3. 3For custom events, use Rank Math or Schema Pro to manually configure Event schema on the specific post.
  4. 4Ensure dates render with timezone offsets.
  5. 5Validate with the Rich Results Test.

Custom site (Next.js)

  1. 1Store events as structured records (JSON, database, or MDX frontmatter).
  2. 2Build-time transform each event into JSON-LD and render in the page head.
  3. 3Use ISR or on-demand rebuild when event details change.
  4. 4Handle eventStatus changes via a CMS workflow — cancellations should trigger a rebuild.
  5. 5Schedule automated rebuilds for events that pass their endDate to mark historical events correctly.

Frequently Asked Questions

What date format does startDate require?+
startDate and endDate use ISO 8601 format with timezone offset: YYYY-MM-DDTHH:MM:SS+HH:MM. For example, 2026-06-15T09:00:00-07:00 represents June 15, 2026 at 9:00 AM Pacific Time. The timezone offset is critical — without it, AI assistants guess, and they often guess wrong for users in other timezones. A conference listed as "2026-06-15T09:00:00" (no offset) might be interpreted as 9 AM user-local time for every user — misleading attendees in timezones different from the organizer's. Always include the offset. For all-day events, the date-only form (YYYY-MM-DD) is acceptable and implies the entire day.
How do I mark up online vs. in-person events?+
Use eventAttendanceMode to declare the mode: OfflineEventAttendanceMode for in-person only, OnlineEventAttendanceMode for online only, MixedEventAttendanceMode for hybrid. For online events, the location should be a VirtualLocation with a url pointing to the join link (Zoom, YouTube Live, etc.). For in-person events, location is a Place with an address. For hybrid, use an array of both — a VirtualLocation and a Place. This distinction matters more now than ever: AI assistants increasingly filter events by mode ("find me a local in-person meetup"), and incorrectly marked events miss those filters.
What about recurring events like weekly classes?+
For recurring events that share a name and venue but occur at different times, use individual Event schema instances — one per occurrence — all linked via superEvent pointing to a parent recurring Event (or the Series as an EventSeries type). Don't try to express recurrence with a single Event object and a complex rrule-like description; Google and AI engines don't parse that pattern. For a weekly yoga class running 52 weeks, that's ideally 52 Event objects auto-generated from your scheduling system, each with its own startDate/endDate.
Do I need offers for free events?+
Yes, and use price: 0 explicitly. An Event with no Offer at all is ambiguous to AI engines — they may assume tickets are required but not declared, or free and also not declared. A free event with an Offer of price 0 and a registration URL is unambiguous and surfaces correctly in free-event queries ("free concerts this weekend near me"). AI assistants often filter events by price tier; an event without offers isn't included in those filter results.
Should I include the event image?+
Yes — event images render prominently in AI event surfaces. Use a 1200x630 or larger image showcasing the venue, speakers, or previous-year photos. Avoid text-heavy promotional graphics — AI answer cards may crop them oddly. For recurring event series, use the same image across occurrences so AI engines can visually cluster them. If you don't have a great photo, use a simple branded graphic with the event name; it's better than no image at all.
What if my event gets postponed or cancelled?+
Update eventStatus to EventPostponed or EventCancelled immediately. Don't just remove the event page or leave it stale. AI assistants learn from historical event patterns, and a page that vanishes unexplained is treated as suspicious; a page with clearly updated eventStatus is handled correctly. For EventPostponed, also update startDate to the new date. For EventCancelled, leave the original startDate and add eventStatus: EventCancelled — AI assistants will stop serving the event in "find events happening" queries but can still answer "was X event cancelled?" questions correctly.
How do I handle multi-day events?+
Use a single Event object with the full span in startDate and endDate (e.g., 2026-06-15T09:00 to 2026-06-17T17:00 for a three-day conference). If the event has notable sub-events (keynotes, sessions, a gala dinner), mark those up as separate Event objects with superEvent pointing to the parent. This structure lets AI engines answer both "when is the conference" (parent event dates) and "when is the keynote" (sub-event dates) from the same data model.
Should Event schema go on a dedicated event page or a listing page?+
Dedicated pages — one per event — are strongly preferred. A listing page with multiple events all marked up inline works technically, but each event gets less authority and AI engines cite individual event pages in event-specific queries. If you run a venue or event organization with many events, structure them as /events/[slug] with a dedicated page per event, each with its own full Event schema. Use a BreadcrumbList to show the hierarchy: Home → Events → Event Name.

Related Schema Generators

Ad