Campaigns now include workspace credits, OpenRouter or Bedrock generation, and reviewed multi-provider publishing. Explore the workflow

Schema Writer

Schema writing engineers can trust.

AI classifies pages and extracts entities. A deterministic engine — never free-form model output — assembles connected JSON-LD with provenance on every property. Use Schema Writer beside entity-first campaigns, not instead of them.

Schema Writer / schema writer

Schema health

92/100

Connected @graph

5 nodes

  • JSON
  • Vocabulary
  • Graph integrity
  • Search features
  • Entity consistency

Entity graph

OrganizationWebSiteWebPageServiceBreadcrumbList

From crawl to production graph

  1. 1

    Crawl and classify

    The crawler inventories pages and templates. AI classification assigns each page a type with a confidence score.

  2. 2

    Extract entities

    Organization, person, product and service entities are extracted once and reused across every graph in the workspace.

  3. 3

    Generate @graph

    The engine assembles Organization, WebSite, WebPage, BreadcrumbList and the main entity into one connected graph with stable @id references.

  4. 4

    Validate and deploy

    Seven validation layers score the result, then serve it from a hosted endpoint or hand you the JSON-LD.

Generated markup should be reproducible.

Run generation twice and Schema Writer produces identical JSON-LD. Every property records its source — verified profile, crawler, rule or AI — together with a confidence score, so reviews focus on facts instead of guesses. Each generation creates an immutable version you can compare and fall back to.

What the engine checks and records

Provenance per property

Every value records its source and confidence, from verified profile data to flagged AI suggestions.

Immutable versions

Graphs are versioned on every generation; recent versions stay browsable with their validation history.

Vocabulary guardrails

Seventeen supported schema.org types with search-feature eligibility rules, including FAQPage restrictions.

Graph integrity

Duplicate @ids and unresolved references fail validation before anything reaches production.

Visible-content consistency

Markup is checked against the actual page title and your business profile for mismatches.

Issue triage

Open issues list severity, layer and node, with resolve and ignore actions per row.

Ship markup without touching templates.

The hosted schema endpoint serves the deployed graph for any crawled URL: GET /api/v1/sites/{siteId}/schema?url=example.com/page — authenticated with a scoped, host-locked token that is hashed at rest and shown only once. Your framework pulls JSON-LD at render time; EntityStacks handles versions behind it.

Live demo

See the engine work

The same deterministic engine that powers EntityStacks runs right here in your browser. Adjust the inputs and watch connected JSON-LD generate with a real validation health score. Nothing is sent to a server.

Runs locally using the published schema rules (rules v sample). Production graphs add entity resolution and provenance tracking.

generated.jsonld
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://northstardental.com/services/example#breadcrumb",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://northstardental.com",
          "name": "Northstar Dental",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://northstardental.com/services",
          "name": "services",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://northstardental.com/services/example",
          "name": "example",
          "position": 3
        }
      ]
    },
    {
      "@id": "https://northstardental.com/services/example#service",
      "@type": "Service",
      "name": "Dental Implants | Northstar Dental",
      "provider": {
        "@id": "https://northstardental.com#organization"
      }
    },
    {
      "@id": "https://northstardental.com/services/example#webpage",
      "@type": "WebPage",
      "about": {
        "@id": "https://northstardental.com#organization"
      },
      "description": "Dental implant treatments from the Northstar Dental team — consult, plan, and restore in one clinic.",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://northstardental.com#website"
      },
      "mainEntity": {
        "@id": "https://northstardental.com/services/example#service"
      },
      "name": "Dental Implants | Northstar Dental",
      "publisher": {
        "@id": "https://northstardental.com#organization"
      },
      "url": "https://northstardental.com/services/example"
    },
    {
      "@id": "https://northstardental.com#organization",
      "@type": "Organization",
      "contactPoint": {
        "@type": "ContactPoint",
        "contactType": "customer support",
        "email": "care@northstardental.com",
        "telephone": "+1-555-014-2832"
      },
      "email": "care@northstardental.com",
      "name": "Northstar Dental",
      "telephone": "+1-555-014-2832",
      "url": "https://northstardental.com"
    },
    {
      "@id": "https://northstardental.com#website",
      "@type": "WebSite",
      "inLanguage": "en",
      "name": "Northstar Dental",
      "publisher": {
        "@id": "https://northstardental.com#organization"
      },
      "url": "https://northstardental.com"
    }
  ]
}

Health score

100/100

Status

valid

Graph nodes

5

No issues found across all validation layers.

FAQ

The writer today is read and review: validate, copy the JSON-LD, mark it deployed. Corrections flow from your business profile and entity library, and a visual editor is planned.

Move from snippets to a system

Build your first defensible schema graph.

Start with a real site, resolve the entities that matter, and validate connected JSON-LD before it reaches production.