Start free

Local business schema for web extraction

A local business schema captures the details that describe a physical place: its name, full address, phone number, website, opening hours, category, and average rating. People extract this to build directories, enrich CRM records, verify and deduplicate location data, or analyze a competitive landscape in a given city. Turning a business listing into structured fields means you can map, sort, and join records instead of copying contact details by hand. Business listings are written in countless layouts, so describing each field is far more durable than maintaining selectors for every site. You define what an address or a set of opening hours is, and the model reads it from the rendered page. Anything the page leaves out, such as a phone number on a sparse listing, comes back as null rather than a plausible-looking invention. For contact data that accuracy is essential, because a fabricated phone number or address is worse than an empty field your team can choose to fill in.


Fields in a Local business schema

The fields teams most often extract for a local business, what type each one is, and whether it is usually present.

Field Type Required Notes
name string yes The business name as displayed on the listing. This is the anchor field for directories and for matching against records you already hold, so it is required.
address string optional The full street address as written on the page, including city and postal code where present. Returned as text so you keep the exact formatting the listing uses for later normalization.
phone string optional The contact phone number shown on the listing, kept as a string to preserve formatting and extensions. Returns null when no number is published rather than an invented one.
website string optional The business website URL. Lets you follow up for richer data, verify the listing, and link directory entries back to the company's own pages.
hours string optional Opening hours as shown on the page, such as Mon to Fri 9am to 6pm. Kept as text because hours are phrased many ways, and set to null when no hours are listed.
category string optional The type of business, such as Restaurant, Plumber, or Dental clinic. Useful for filtering a directory and for segmenting a competitive analysis by industry within an area.
rating number optional The average customer rating as a number, usually on a five point scale. Returned when the listing publishes one, giving you a quick quality signal for ranking or shortlisting places.
reviewCount number optional How many reviews back the rating, parsed as a number. Pairs with rating to gauge confidence, since a high score from a handful of reviews carries less weight than one from many.

The schema

Copy this and send it with any URL.

{
  "name": "string",
  "address": "string",
  "phone": "string",
  "website": "string",
  "hours": "string",
  "category": "string",
  "rating": "number",
  "reviewCount": "number"
}

Example output

Validated JSON back, matching the schema.

{
  "name": "Maple Street Coffee Roasters",
  "address": "412 Maple Street, Portland, OR 97205",
  "phone": "(503) 555-0182",
  "website": "https://example.com",
  "hours": "Mon to Sat 7am to 7pm, Sun 8am to 4pm",
  "category": "Coffee shop",
  "rating": 4.7,
  "reviewCount": 932
}

Local business schema: FAQ

What if a listing has no phone number or address?
Those fields return null rather than a guess. Because the output is validated against your schema before it is returned, any contact detail you receive was actually present on the page. For local business data this is critical, since a fabricated phone number or address would mislead users and pollute a directory, so an empty field is the safer outcome.
Can Extracto pull data from Google Maps or Yelp?
Those platforms use aggressive anti-bot protection, and Extracto handles that with a managed bypass layer: every request runs through a real headless browser with proxies handled for you, so public pages behind Cloudflare, DataDome, or PerimeterX still render. The exception is login-gated content that needs session cookies, which is available on Enterprise. Always respect each site's robots.txt and terms of service before extracting.
How are opening hours returned?
Hours come back as text in the hours field, because listings express them in many formats and ranges. You can ask in your schema for a consistent style and the model will normalize toward it, but the field stays flexible enough to capture split shifts and per-day variation. When a listing shows no hours, the field is null.
Will one schema work across different directory sites?
Yes. The meaning of a name, address, or phone number is the same no matter how a directory lays out its page, so a single schema can run across many sources without per-site selector tuning. Because every request runs through a real headless browser with a managed bypass layer, this holds on JavaScript-rendered and anti-bot-protected directories too. You will still see nulls where a page simply omits a field, which keeps the data you do collect trustworthy.
Can I test this before paying?
The free plan covers 100 pages with no credit card, which is enough to point this local business schema at a few cooperative listings and see whether the contact fields come back the way you need. Paid plans start at 35 dollars per month for higher volume. Confirming the output on real pages first is the safest way to begin.