Chain vs Independent Labeler for Google Maps Leads avatar

Chain vs Independent Labeler for Google Maps Leads

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Chain vs Independent Labeler for Google Maps Leads

Chain vs Independent Labeler for Google Maps Leads

Remove chains and franchises from your local-business leads. Labels each place from a Google Maps dataset or your own list as chain, franchise or independent, with confidence and reasons, using 19,119 known brands, repeated names, shared websites and store-locator URLs. No scraping.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Ultimate Foresight Inc

Ultimate Foresight Inc

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Chain vs Independent Labeler cleans local-business lead lists. It labels every place from your Google Maps scraper dataset or your own list as chain, franchise, independent or uncertain, with a confidence score and the reasons, so you can remove chains and franchises before outreach and focus on independent businesses. It makes no requests to Google or any website. Click Start with the prefilled example to see results in seconds.

What does Chain vs Independent Labeler do?

  • ✅ Matches business names against 19,119 brands in the OpenStreetMap name-suggestion-index, checking the brand's country and category, after stripping store numbers and suffixes like "- Downtown" or "#1234"
  • ✅ Spots multi-location businesses in your own data: the same name at 3 or more addresses (adjustable), or one website domain shared by 2 or more addresses
  • ✅ Detects store-locator URLs such as /locations/, /store/123 or stores.brand.com
  • ✅ Flags franchise brands where Wikidata lists franchising as the business model
  • ✅ Returns a label, confidence (0-1) and plain-English reasons for every place, and keeps all your original fields
  • ✅ Works directly on the output of Google Maps scrapers (fields title, address, website, countryCode, categoryName are detected automatically)

Who is it for?

  • 📈 Marketing agencies and freelancers selling to independent restaurants, salons, dentists, contractors and other local businesses
  • 🧾 SaaS and B2B sales teams whose buyers are owner-operated businesses, not corporate chains
  • 🗺️ Lead-list builders who scrape Google Maps and need to drop national brands
  • 📊 Market researchers measuring how chain-heavy a city or niche is

How to filter chains out of Google Maps leads

  1. Run any Google Maps scraper on Apify and note its dataset ID, or prepare your own list of places.
  2. Open this Actor and pick that dataset in Places dataset ID, or paste places into Places (prefilled with two examples).
  3. Click Start.
  4. In the results, filter label = independent (dataset input: chainLabel.label) and export to CSV, Excel or JSON, or pull the results through the API.

Tip: run your whole list in one go. Repeated names and shared domains are only detected within a single run.

Input example

This is the prefilled input:

{
"places": [
{
"name": "Starbucks",
"address": "1 Main St, Austin, TX",
"website": "https://www.starbucks.com/store-locator/store/1234",
"countryCode": "US",
"category": "Coffee shop"
},
{
"name": "Joe's Barber Shop",
"address": "12 Pine St, Austin, TX",
"website": "https://joesbarberaustin.com",
"countryCode": "US",
"category": "Barber shop"
}
]
}

Or use a dataset: { "datasetId": "YOUR_GOOGLE_MAPS_DATASET_ID", "repeatThreshold": 3 }

Output example

Real output from the prefilled input (run on 2026-10-21):

[
{
"name": "Starbucks",
"address": "1 Main St, Austin, TX",
"website": "https://www.starbucks.com/store-locator/store/1234",
"countryCode": "US",
"category": "Coffee shop",
"label": "chain",
"confidence": 0.98,
"reasons": [
"Name matches known brand 'Starbucks' in OpenStreetMap name-suggestion-index (exact match, category agrees)",
"Website URL looks like a store-locator / location page"
],
"brand": "Starbucks",
"brandWikidata": "Q37158",
"nsiCategory": "amenity/cafe",
"sameNameCountInInput": 1,
"sameDomainCountInInput": 1,
"websiteDomain": "starbucks.com"
},
{
"name": "Joe's Barber Shop",
"address": "12 Pine St, Austin, TX",
"website": "https://joesbarberaustin.com",
"countryCode": "US",
"category": "Barber shop",
"label": "independent",
"confidence": 0.75,
"reasons": [
"No brand match and no multi-location signal found; has its own website domain (joesbarberaustin.com)"
],
"brand": null,
"brandWikidata": null,
"nsiCategory": null,
"sameNameCountInInput": 1,
"sameDomainCountInInput": 1,
"websiteDomain": "joesbarberaustin.com"
}
]

With dataset input, your original item is kept and the result is added under chainLabel. This real example comes from a test with a Google Maps-style dataset where the same restaurant appeared at two addresses with one website:

{
"title": "Veracruz All Natural",
"address": "1704 E Cesar Chavez St, Austin, TX",
"website": "https://www.veracruztacos.com/",
"countryCode": "US",
"categoryName": "Mexican restaurant",
"placeId": "p2",
"chainLabel": {
"label": "chain",
"confidence": 0.75,
"reasons": [
"Website domain veracruztacos.com shared by 2 different addresses in this input"
],
"brand": null,
"brandWikidata": null,
"nsiCategory": null,
"sameNameCountInInput": 2,
"sameDomainCountInInput": 2,
"websiteDomain": "veracruztacos.com"
}
}

How much does it cost to label leads?

This Actor uses pay-per-event pricing:

  • $0.0015 per place labeled (one result row per place)
  • a tiny Actor start fee of $0.00005 per run
  • plus the small Apify platform usage of the run, paid by you. For the prefilled 2-place example this was about $0.0001 (256 MB, about 2 seconds).

So 1,000 places cost about $1.50 and 10,000 places about $15, plus platform usage. You pay only for places labeled, and Apify lets you set a maximum cost per run.

Use it through the API, integrations or AI agents

  • API: POST https://api.apify.com/v2/acts/ultimatemc~chain-vs-independent-labeler/run-sync-get-dataset-items with your Apify token and the input JSON. JavaScript and Python examples are on the API tab.
  • AI agents (MCP): add https://mcp.apify.com?tools=ultimatemc/chain-vs-independent-labeler to Claude, Cursor, ChatGPT or any MCP client so your agent can classify businesses as a tool. See Apify MCP server.
  • Pipelines: trigger it after your Google Maps scraper finishes with an Apify integration or webhook, and send the clean list to Google Sheets, your CRM or Make, Zapier or n8n.

How the label is decided

SignalEffect
Exact or prefix match to a known brandchain (or franchise), confidence 0.75-0.95, higher when the category agrees
Brand's Wikidata entry lists franchisingfranchise
Same name at 3+ different addresses in your inputchain
Same website domain at 2+ different addresses (social and booking sites ignored)chain
Store-locator URL or store number in the namechain signal (0.6 on its own)
Weak partial brand match (e.g. "Express Cleaners" vs "Express"), or a brand known only in another countryuncertain (0.5), check by hand
None of the aboveindependent (0.75 with its own website domain, otherwise 0.65)

Data sources and licenses

  • name-suggestion-index v8.0.20260918, github.com/osmlab/name-suggestion-index, BSD-3-Clause (license bundled with the Actor).
  • Wikidata franchising flags (queried 2026-10-20), CC0.
  • Your own input data. No scraping and no requests to Google or other websites.

FAQ

Does "independent" guarantee the business is independently owned?

No. It means no chain signal was found. Small regional chains that aren't in the brand index and appear only once in your data will look independent.

Why are most franchises labeled "chain"?

Public data rarely says whether a location is franchised or corporate-owned. Only 53 brands in the index carry a franchising flag, so most franchised brands are labeled chain. For lead filtering, both usually mean "not an owner-operated independent".

Which countries work?

Brand matching uses the country code when present and covers brands from many countries in the name-suggestion-index. Repeat-name and shared-domain signals work in any country.

Does it scrape Google Maps?

No. Bring the data from any Google Maps scraper or your own CRM export; this Actor only labels it.

Limitations

  • Generic names can collide with brands (e.g. "Shell", "Target"). Category and country checks reduce this but don't remove it.
  • Repeat and shared-domain signals only see places in the same run.
  • Results depend on the brand index; very new or local brands may be missing.

Other tools by Ultimate Foresight

Mislabeled business? Open an issue on the Issues tab with the name, address and website.