Staaarter

Local Business Schema Generator

Fill in a business name, type, address, contact details, and opening hours, and this tool builds a complete LocalBusiness (or Restaurant/Store/ProfessionalService/MedicalBusiness) JSON-LD object with a nested PostalAddress and openingHoursSpecification array, wrapped in a ready-to-paste <script type="application/ld+json"> tag. A free online tool from Staaarter, right in your browser.

Runs locallyUpdated 2026-08-04
By Staaarter Team
generatorjson-ldlocal-business

Overview

Introduction

LocalBusiness schema tells search engines where a business is physically located and when it's open, the kind of information that shows up directly in local search results and map listings. It's more structurally involved than Organization schema: address is a nested PostalAddress object, and opening hours are a whole array of per-day specifications.

This generator handles both of those nested shapes from plain form fields, including a dynamic add/remove list for opening hours where each entry's day-of-week is automatically expanded to the full schema.org URI format the spec requires.

What Is Local Business Schema Generator?

A form-driven generator for LocalBusiness JSON-LD (or one of four common subtypes: Restaurant, Store, ProfessionalService, MedicalBusiness), covering name, address, contact details, price range, and a list of opening-hours entries.

The address is built as a nested PostalAddress object and opening hours as an array of OpeningHoursSpecification objects, matching the exact nested shape schema.org's spec defines rather than flattened top-level fields.

How Local Business Schema Generator Works

Street address, city, region, postal code, and country are combined into a nested address object (PostalAddress) with the correct property names (streetAddress, addressLocality, addressRegion, postalCode, addressCountry).

Each opening-hours row (a day toggle plus open/close times) becomes one entry in an openingHoursSpecification array, with dayOfWeek expanded from the selected day to its full https://schema.org/Monday-style URI automatically.

When To Use Local Business Schema Generator

Setting up structured data for a business with a physical location customers visit, like a restaurant, retail store, or clinic.

Adding machine-readable opening hours so search engines and map listings can show accurate hours without you maintaining them separately in a business-listing dashboard.

Features

Advantages

  • Builds the nested PostalAddress and openingHoursSpecification structures automatically, both easy to get wrong writing JSON-LD by hand.
  • Expands day-of-week values to the full schema.org URI format automatically, rather than requiring you to remember or type it.
  • Supports switching between LocalBusiness and four common, more specific subtypes without re-entering any other field.

Limitations

  • Only supports one set of opening hours per business; multi-location businesses need one generated schema per location, run separately.
  • Doesn't verify the address is a real, deliverable location - that accuracy is a manual responsibility.
  • Covers the five most common business subtypes; schema.org defines dozens more specific ones (like Dentist or AutoRepair) not exposed as toggles here, though you can still describe those with the generic LocalBusiness type.

Examples

A restaurant with weekday hours

Input

Name: Corner Bistro
Type: Restaurant
Address: 45 Market St, Springfield, IL, 62701, US
Phone: +1-555-0142
URL: https://cornerbistro.example.com
Price range: $$
Hours: Monday-Friday 11:00-21:00

Output

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Corner Bistro",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "45 Market St",
    "addressLocality": "Springfield",
    "addressRegion": "IL",
    "postalCode": "62701",
    "addressCountry": "US"
  },
  "telephone": "+1-555-0142",
  "url": "https://cornerbistro.example.com",
  "priceRange": "$$",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "https://schema.org/Monday",
      "opens": "11:00",
      "closes": "21:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "https://schema.org/Tuesday",
      "opens": "11:00",
      "closes": "21:00"
    }
  ]
}
</script>

Each weekday with matching hours is added as its own OpeningHoursSpecification row (two shown here for brevity), with dayOfWeek expanded to the full schema.org URI automatically.

Best Practices & Notes

Best Practices

  • Keep hours in the schema in sync with any hours shown elsewhere (Google Business Profile, the page's own visible hours), since conflicting hours across sources confuses both search engines and customers.
  • Use a real, verifiable street address; a P.O. box or virtual address undermines LocalBusiness eligibility and can conflict with map-listing verification.
  • Pick the most specific business type available (Restaurant, Store, and so on) rather than defaulting to generic LocalBusiness, since more specific types can unlock more relevant rich-result features.
  • Update the schema whenever hours change seasonally (holiday hours, and so on) rather than leaving stale hours in place.

Developer Notes

openingHoursSpecification entries are only included when both opens and closes are filled in for a row, so an incomplete row being edited doesn't produce a broken specification entry in the meantime; dayOfWeek is always expanded to its full https://schema.org/<Day> URI form per the spec's documented format.

Local Business Schema Generator Use Cases

  • Adding structured data to a restaurant, retail store, or clinic's website homepage
  • Publishing machine-readable opening hours for a business with hours that differ by day
  • Marking up multiple business locations, one generated schema per location

Common Mistakes

  • Writing dayOfWeek as a bare string like "Monday" instead of the full https://schema.org/Monday URI the spec requires.
  • Letting the schema's opening hours drift out of sync with the business's actual current hours after a seasonal change.

Tips

  • If your business has identical hours every day, you'll still need one row per day in this generator, since openingHoursSpecification doesn't support a compact day-range shorthand.
  • Run the output through the Structured Data Validator tool afterward to confirm the required name and address fields are both present.

References

Frequently Asked Questions