Skip to content

LocalBusiness Schema Generator

Fill in a business's name, address, and opening hours, and get a ready-to-paste LocalBusiness JSON-LD script tag — with opening hours parsed from a plain "Mo-Fr 09:00-17:00" line into the structured format Google actually expects, instead of leaving that translation to you.

  • Structured PostalAddress, not a flat text field
  • Opening hours parsed from plain-text lines
  • 2-letter country code check
  • Ready-to-paste <script> tag
  • Runs fully client-side

Generator

Built in your browser, never sent anywhere

    Fill in the required fields to generate LocalBusiness schema.

    How to generate LocalBusiness schema

    1. 01

      Fill in name and address

      Street, city, and a 2-letter country code are required; region and postal code are recommended.

    2. 02

      Add opening hours (optional)

      One line per schedule, like "Mo-Fr 09:00-17:00" — day ranges and single days both work.

    3. 03

      Add contact and pricing

      Phone and price range (like $$) are optional but recommended.

    4. 04

      Copy the script tag

      Paste it into the business's own page — usually the homepage or a location page.

    Why the address is a nested object, not one text field#

    Schema.org's PostalAddress breaks an address into separate machine-readable parts — street, city, region, postal code, country — rather than one string, because search engines and map services need to parse each part independently (matching a city name for local search, validating a country code for currency or shipping context). A single flattened address string looks fine to a human reading the page but gives a crawler nothing structured to work with. This tool builds that nested object correctly from separate fields, so you never have to think about the JSON-LD shape.

    How the opening hours line gets parsed#

    Typing "Mo-Fr 09:00-17:00" is much faster than hand-writing a dayOfWeek array and an OpeningHoursSpecification object, so this tool accepts that shorthand directly: a two-letter day code, optionally a range with a second day code, then two times separated by a hyphen. Each line in the opening hours box becomes its own separate specification object, so a business with different hours on weekends just needs a second line, like "Sa-Su 10:00-14:00" underneath the weekday line.

    Why the country code has to be exactly 2 letters#

    addressCountry expects an ISO 3166-1 alpha-2 code — "US", not "USA" or "United States" — because that is the format schema.org and the services reading this data actually parse. A country name spelled out is not technically invalid JSON, but it will not be recognized as the country it names, which quietly breaks any downstream use of that field. This tool checks the exact 2-letter shape and rejects anything else.

    Frequently asked questions

    Why is the address split into multiple fields instead of one text box?

    Because schema.org's PostalAddress needs street, city, region, postal code and country as separate, machine-readable parts — a single flattened string gives crawlers and map services nothing structured to parse, even though it looks fine to a human reading the page.

    What format do opening hours need to be in?

    A day code (or day range) followed by a time range, like "Mo-Fr 09:00-17:00" or "Sa 10:00-14:00" — one schedule per line. This gets parsed into the structured OpeningHoursSpecification format automatically.

    Why does "USA" get rejected as a country code?

    The expected format is a 2-letter ISO 3166-1 code, like US — not the 3-letter form or the spelled-out country name. A different format is not recognized correctly by the services reading this field.

    Is my business data sent anywhere?

    No. The JSON-LD is assembled entirely in your browser — nothing you enter is transmitted or stored.