Local Business Finder and Fit Scorer
Pricing
$5.00 / 1,000 lead qualifieds
Local Business Finder and Fit Scorer
Find local businesses in OpenStreetMap and score each one against your ideal customer description.
Pricing
$5.00 / 1,000 lead qualifieds
Rating
0.0
(0)
Developer
jay casey
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Find local businesses in OpenStreetMap and score each one against your ideal customer description.
What can Local Business Finder and Fit Scorer do?
Describe the businesses you want, then name business types and a place. The Actor finds OpenStreetMap records, reads available company websites, and returns contact details, fit scores, reasons, and an outreach angle.
| What you get | Features |
|---|---|
| 📍 Business and contact facts from OpenStreetMap and company sites | 🗺️ Business search by type and place |
| 🎯 A fit score, confidence, reasons, and outreach angle | 🌐 Optional website reading for more evidence |
Who this is for
- Build a local prospect list
- Filter businesses against an ideal customer profile
- Draft a research backed outreach angle
What you get back
| Field | Type | What you get | Example |
|---|---|---|---|
lead_id | string | Stable OpenStreetMap identifier for the business. | osm:node/2533220906 |
name | string | Business name from the source record. | KC Dental |
category | string | Primary business category. | dentist |
categories | array | Knowledge categories assigned to the result. | ["cosmetic dentists"] |
description | null | Business description when the source provides one. | null |
address | string | Street address reported for the business. | 6301 West Parmer Lane, 606, Austin, TX, 78729 |
city | string | City reported for the business. | Austin |
state | string | State or region reported for the business. | TX |
country | null | Country reported for the business. | null |
website | string | Business website address when listed. | https://www.kcdentalaustin.com/ |
phone | string | Phone number reported by the source. | +1-512-918-0888 |
email | string | Public business email when listed. | info@kcdentalaustin.com |
rating | null | Rating when the source provides one. | null |
reviews_count | null | Review count when the source provides one. | null |
opening_hours | string | Business hours reported by the source. | Mo-Th 08:00-17:00; Fr 08:00-16:00 |
brand | null | Brand name when the source provides one. | null |
lat | number | Latitude of the business location. | 30.4443219 |
lon | number | Longitude of the business location. | -97.7440456 |
website_status | string | Result of fetching the business website. | ok |
website_title | string | Page title found on the business website. | Best Dentist in Austin | KC Dental |
website_text | string | Text extracted from the business website. | Family and Cosmetic DentistryServing Northwest Austin , Best Dentist in Austin | KC Dental Skip to main content Skip to primary sidebar Skip to footer Welco... |
source_url | string | Public source page for this record. | https://www.openstreetmap.org/node/2533220906 |
source | string | Directory or source system used for the record. | openstreetmap |
status | string | Whether this item completed its requested analysis. | qualified |
qualified | boolean | Whether the business met the supplied ideal customer criteria. | true |
qualification_score | integer | Fit score assigned to the lead. | 85 |
confidence | string | Confidence level for the qualification. | high |
qualification_reasons | array | Evidence that supported the qualification result. | ["Cosmetic dentistry services explicitly listed on website","Independent practice (founder Dr. Kyleen Chen, not a chain)","Active website with service descri... |
disqualifiers | array | Reasons the lead did not fit, if any. | [] |
qualification_summary | string | Plain summary of the lead fit. | KC Dental is an independent Austin cosmetic dentistry practice with active website services matching ideal customer profile. |
outreach_angle | string | Suggested outreach angle when the lead qualifies. | Offer digital impression technology integration to enhance their cosmetic dentistry workflow |
ideal_customer | string | Ideal customer description used to score the lead. | Independent dental clinics offering cosmetic dentistry with an active website. Exclude large chains. |
model | string | Model used for the analysis. | nvidia.nemotron-nano-3-30b |
qualified_at | string | Time the lead was qualified. | 2026-09-11T17:12:31.106675+00:00 |
error | null | Problem details when this item does not complete. | null |
error_stage | null | Processing step that failed, if any. | null |
The run also links to its dataset and any files named in the Actor output.
What you need to provide
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
idealCustomer | string | Yes | Describe the businesses you want in free text: industry, size, ownership, services, location, signals, and exclusions. | Independent dental clinics offering cosmetic dentistry, with an active website and stro... |
searchSpec | object | Yes | queries: business types (e.g. 'dentists', 'coffee shops', 'law firms'); location: city, neighbourhood, region or address (geocoded with OpenStreetMap); maxResults per query (1-500); fetchWebsites (default true) fetches each business's own website for qualification evidence. Legacy Google-Maps keys (language, includeWebResults, skipClosedPlaces) are accepted and ignored. | {"queries":["dentists","cosmetic dentists"],"location":"Austin, TX","maxResults":15,"fe... |
llm | object | No | Leave blank for the included model (nvidia.nemotron-nano-3-30b via the Actor's Bedrock endpoint, no key needed), or provide an OpenAI-compatible baseUrl, model, and apiKey. Without an apiKey, baseUrl/model are ignored. | `` |
Quick start
- Open the Actor in Apify Console.
- Click Try for free or Create a task.
- Replace the sample values with your own input.
- Click Start.
- Open the dataset and the named output files when the run ends.
Pricing
lead-qualified: $0.005 per lead qualified.- Failed or skipped work is not charged unless an event is listed in the run charges.
- Normal Apify compute and proxy costs may also apply.
Limits and honest notes
- OpenStreetMap coverage varies by area and business type.
- Ratings and review counts are often absent because OpenStreetMap is not a review service.
- A fit score is model analysis of the available record and website text. Review it before outreach.
Code and API
The examples below use the same values as the Apify Console sample.
Input JSON
{"idealCustomer": "Independent dental clinics offering cosmetic dentistry, with an active website and strong local reviews. Exclude large chains.","searchSpec": {"queries": ["dentists","cosmetic dentists"],"location": "Austin, TX","maxResults": 15,"fetchWebsites": true}}
Real output sample
This excerpt comes from the real run named in the current marketplace release report.
{"lead_id": "osm:node/2533220906","name": "KC Dental","category": "dentist","categories": ["dentists"],"description": null,"address": "6301 West Parmer Lane, 606, Austin, TX, 78729","city": "Austin","state": "TX","country": null,"website": "https://www.kcdentalaustin.com/","phone": "+1-512-918-0888","email": "info@kcdentalaustin.com","rating": null,"reviews_count": null,"opening_hours": "Mo-Th 08:00-17:00; Fr 08:00-16:00","brand": null,"lat": 30.4443219,"lon": -97.7440456,"website_status": "ok","website_title": "Best Dentist in Austin | KC Dental","website_text": "Family and Cosmetic DentistryServing Northwest Austin , Best Dentist in Austin | KC Dental Skip to main content Skip ...","source_url": "https://www.openstreetmap.org/node/2533220906","source": "openstreetmap","status": "qualified","qualified": true,"qualification_score": 85,"confidence": "high","qualification_reasons": ["Business name includes 'Cosmetic Dentistry'","Website explicitly offers 'Family and Cosmetic Dentistry' services","Location in 'Northwest Austin' matches target area","Founder's background includes cosmetic dentistry affiliations","Services listed include 'cosmetic' and 'advanced' dentistry"],"disqualifiers": [],"qualification_summary": "KC Dental is a single-location Austin dental practice offering cosmetic dentistry services with a dedicated website and founder credentials aligned with cosmetic focus.","outreach_angle": "Offer advanced digital impression solutions to enhance their cosmetic dentistry workflow","model": "nvidia.nemotron-nano-3-30b","qualified_at": "2026-09-11T04:22:22.759391+00:00"}
curl
curl -X POST "https://api.apify.com/v2/acts/physealabs~lead-finder-qualifier/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d @input.json
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("physealabs/lead-finder-qualifier").call(run_input={'idealCustomer': 'Independent dental clinics offering cosmetic dentistry, with an active website and strong local reviews. Exclude large chains.', 'searchSpec': {'queries': ['dentists', 'cosmetic dentists'], 'location': 'Austin, TX', 'maxResults': 15, 'fetchWebsites': True}})items = client.dataset(run["defaultDatasetId"]).list_items().items
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('physealabs/lead-finder-qualifier').call({"idealCustomer": "Independent dental clinics offering cosmetic dentistry, with an active website and strong local reviews. Exclude large chains.", "searchSpec": {"queries": ["dentists", "cosmetic dentists"], "location": "Austin, TX", "maxResults": 15, "fetchWebsites": true}});const { items } = await client.dataset(run.defaultDatasetId).listItems();
You can call this Actor from an agent or LLM tool that can send HTTP requests to the Apify API. Keep the Apify token in a secret store.
FAQ
Does it scrape Google Maps?
No. It uses OpenStreetMap and each business website when available.
Does it always find an email address?
No. Contact fields are returned only when the public sources provide them.
Can I skip website fetches?
Yes. Set fetchWebsites to false inside searchSpec.