Free tool · No signup

    Local Business Schema Generator

    Turn your business name, address, hours and contact details into valid LocalBusiness JSON-LD.

    Pick the most specific schema.org subtype that fits.

    schema.org shorthand. Separate multiple ranges with commas.

    LocalBusiness JSON-LD

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Restaurant",
      "name": "Fig & Salt Kitchen",
      "url": "https://figandsalt.example.com",
      "telephone": "+44 20 7946 0321",
      "image": "https://figandsalt.example.com/photos/dining-room.jpg",
      "priceRange": "££",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "42 Bermondsey Street",
        "addressLocality": "London",
        "addressRegion": "Greater London",
        "postalCode": "SE1 3UD",
        "addressCountry": "GB"
      },
      "geo": {
        "@type": "GeoCoordinates",
        "latitude": 51.5006,
        "longitude": -0.0813
      },
      "openingHours": [
        "Tu-Sa 12:00-22:00",
        "Su 12:00-17:00"
      ]
    }
    </script>

    Paste this block into the <head> or anywhere in the <body> of the page it describes, then confirm it parses with the JSON-LD schema validator.

    In short

    A local business schema generator produces LocalBusiness JSON-LD, which requires a name, an address as a nested PostalAddress object, and benefits from telephone, openingHoursSpecification, geo coordinates and priceRange. This markup does not directly create the map-pack listing, which comes from Google Business Profile, but it reinforces the same NAP (name, address, phone) data for Google's Knowledge Graph and can surface star ratings, hours and address details in a search knowledge panel or rich result.

    Worked example

    What the output looks like

    Input
    Maple & Vine Bistro, 214 Congress Ave, Austin, TX 78701, (512) 555-0148, open 11am-9pm Tue-Sun, price range $$
    Output
    { "@context": "https://schema.org", "@type": "Restaurant", "name": "Maple & Vine Bistro", "telephone": "+1-512-555-0148", "priceRange": "$$", "address": { "@type": "PostalAddress", "streetAddress": "214 Congress Ave", "addressLocality": "Austin", "addressRegion": "TX", "postalCode": "78701", "addressCountry": "US" }, "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], "opens": "11:00", "closes": "21:00" } ] }
    How to read it
    Restaurant is used instead of the generic LocalBusiness because it's more specific, which Google's documentation prefers. The address is a nested PostalAddress rather than a flat string, and dayOfWeek is an array so Monday closure is correctly implied by its absence.

    How it works

    1

    Enter your business name, address and phone

    Provide the exact legal or trading name and full postal address as it appears on your Google Business Profile, so the JSON-LD reinforces rather than contradicts your existing local listing.

    2

    Add hours, price range and a business subtype

    Pick the most specific @type available, such as Restaurant or Dentist, and enter opening hours per day and a priceRange like $$ so Google can match the entity precisely.

    3

    Paste the JSON-LD into every relevant location page

    For multi-location businesses, generate one LocalBusiness block per physical location and place each on its own location page, not a single combined block on the homepage.

    What this tool does

    • Generates LocalBusiness (or a specific subtype like Restaurant) JSON-LD
    • Structures address as a nested PostalAddress object
    • Formats opening hours in ISO 8601 day and time ranges
    • Includes geo coordinates, priceRange and telephone fields

    Questions

    Frequently asked

    More free SEO tools

    Track local rankings and structured data by location

    LemRank tracks rankings, backlinks, and AI-search visibility in one dashboard. 14-day free Pro trial. No credit card.