DentalPlans Scraper | Fast & Reliable | $3/1k
Pricing
$2.99 / 1,000 results
DentalPlans Scraper | Fast & Reliable | $3/1k
Get structured US dentist listings from DentalPlans.com including Practice information, specialties, location details, booking availability and more. Built for market mapping, lead generation, and automated CRM or analytics pipelines.
Pricing
$2.99 / 1,000 results
Rating
5.0
(1)
Developer

Fatih Tahta
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
DentalPlans Scraper
Slug: fatihtahta/dentalplans-scraper
Overview
DentalPlans Scraper collects structured dentist listing data, including provider identity details, practice information, location attributes, booking availability, and source provenance metadata. It supports direct scraping from listing/search/profile URLs or query-driven collection using ZIP-based search and optional filters. DentalPlans is a widely used directory for finding dental providers, making it a useful source for local market mapping, provider discovery, and coverage analysis. The actor standardizes output into consistent JSON records so teams can analyze data without manual cleanup. This automation reduces repetitive collection work, improves consistency between runs, and saves substantial research time.
Why Use This Actor
- Market researchers and analysts: Track provider presence, specialty distribution, and local coverage patterns by ZIP and radius for benchmarking and trend analysis.
- Product and content teams: Build and refresh provider directories, landing-page content, and local market snapshots using structured, repeatable outputs.
- Developers and data engineers: Feed analytics stacks, ETL jobs, and internal APIs with dataset-ready JSON records that are easy to validate and process.
- Lead generation and enrichment teams: Identify practices and provider profiles in target geographies, then enrich CRM workflows with contact and location context.
- Monitoring and competitive tracking: Re-run scheduled collections to monitor listing changes, booking availability, and regional provider movement over time.
Input Parameters
Provide any combination of URLs, queries, and filters to control coverage and precision.
| Parameter | Type | Description | Default |
|---|---|---|---|
startUrls | array<string> | One or more DentalPlans URLs to process directly. You can mix search result pages, category-like listing pages, and individual listing/profile pages in one run. | `[ |
| "https://www.dentalplans.com/dentist-search-results/?zip=90210" | |||
| ]` | |||
zipCode | integer | ZIP code used for location-based search when building a query-driven run. Minimum: 10. | 50000 |
radius | string | Search distance from the ZIP code. Allowed values: 5, 10, 20, 50 (miles). | "10" |
acceptsBooking | boolean | When true, returns only dentists with online booking availability. | false |
searchTerm | string | Optional name filter for dentist or practice matching. Leave empty for broader coverage. | "" |
dentistGender | string | Optional dentist gender filter. Allowed values: "" (Any), male, female. | "" |
dentistLanguage | string | Optional language filter. Allowed values: "" (Any), english, spanish. | "" |
dentistSpeciality | array<string> | Optional specialty filter. Allowed values: 1 (General Dentistry), 2 (Endodontics), 3 (Oral Surgery), 4 (Orthodontics), 5 (Pedodontics), 6 (Periodontics), 7 (Prosthodontics). | [] |
limit | integer | Maximum listings to save per query. Useful for sampling or capped production runs. Minimum: 10. | 50000 |
proxyConfiguration | object | Optional connection settings for stability at larger volumes. Most runs can use the default as-is. | { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] } |
Example Input
{"startUrls": ["https://www.dentalplans.com/dentist-search-results/?zip=90210"],"zipCode": 90210,"radius": "10","acceptsBooking": true,"dentistLanguage": "english","dentistSpeciality": ["1", "4"],"limit": 500}
Output
6.1 Output destination
The actor writes results to an Apify dataset as JSON records. And the dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs without post-processing.
6.2 Record envelope (all items)
Every output item includes a stable envelope:
- type (string, required)
- id (number, required)
- url (string, required)
Recommended idempotency key: type + ":" + id.
Use this key for deduplication and upserts when the same entity is collected across multiple seeds or repeated runs.
6.3 Examples
Example: listing (type = "listing")
{"type": "listing","id": 12738,"url": "https://www.dentalplans.com/dentists/california/santa-monica/90404/dr-natasha-shojania-182605/","listing_id": 12738,"display_name": "Pacific Orthodontics","provider": {"provider_id": 12738,"grouping_id": 182605,"full_name": "Dr. Natasha Shojania","first_name": "Natasha","last_name": "Shojania","name_prefix": "Dr.","specialties": ["General Dentistry"],"phone_number": "3108293611"},"practice": {"name": "Pacific Orthodontics","accepted_plan_count": 6,"smile_points": 850.03},"location": {"street_address": "2021 Santa Monica Blvd Ste 340e","city": "Santa Monica","state": "CA","postal_code": "90404","distance_miles": "10","latitude": "34.0299","longitude": "-118.48"},"booking": {"is_online_booking_available": true,"booking_system": "HS1","booking_provider_id": "2e04f0c2-db30-48f0-a8f1-c5842296a24b","booking_practice_id": "c508c707-09b1-4bd6-a0a2-0733b739e0df"},"provenance": {"listing_url": "https://www.dentalplans.com/dentists/california/santa-monica/90404/dr-natasha-shojania-182605/","source_url": "https://www.dentalplans.com/...","seed_type": "url","seed_value": "https://www.dentalplans.com/dentist-search-results/?zip=90210","scraped_time": "2026-03-01T05:47:39.240452+00:00"}}
Field reference
Listing fields (type = "listing")
- type (string, required): Record category.
- id (number, required): Stable listing identifier for idempotency and upserts.
- url (string, required): Canonical listing URL.
- listing_id (number, required): Listing identifier from source data.
- display_name (string, optional): Public display name for the listing/practice.
- provider.provider_id (number, optional): Provider identifier.
- provider.grouping_id (number, optional): Grouping identifier associated with the provider.
- provider.full_name (string, optional): Full provider name.
- provider.first_name (string, optional): Provider first name.
- provider.last_name (string, optional): Provider last name.
- provider.name_prefix (string, optional): Name prefix such as “Dr.”.
- provider.specialties (array: Specialty labels.
- provider.phone_number (string, optional): Contact phone number.
- practice.name (string, optional): Practice name.
- practice.accepted_plan_count (number, optional): Number of accepted plans.
- practice.smile_points (number, optional): Smile points metric when available.
- location.street_address (string, optional): Street address.
- location.city (string, optional): City.
- location.state (string, optional): State/region code.
- location.postal_code (string, optional): Postal code.
- location.distance_miles (string, optional): Distance from query ZIP in miles.
- location.latitude (string, optional): Latitude coordinate.
- location.longitude (string, optional): Longitude coordinate.
- booking.is_online_booking_available (boolean, optional): Indicates online booking support.
- booking.booking_system (string, optional): Booking system label.
- booking.booking_provider_id (string, optional): Booking provider identifier.
- booking.booking_practice_id (string, optional): Booking practice identifier.
- provenance.listing_url (string, optional): Listing URL associated with the record.
- provenance.source_url (string, optional): Source page URL used during collection.
- provenance.seed_type (string, optional): Seed type used for discovery.
- provenance.seed_value (string, optional): Seed value provided at input.
- provenance.scraped_time (string, optional): Extraction timestamp in ISO format.
Data guarantees & handling
- Best-effort extraction: fields may vary by region/session/availability/UI experiments.
- Optional fields: null-check in downstream code.
- Deduplication: recommend
type + ":" + id.
How to Run on Apify
- Open the actor in Apify Console.
- Configure your search parameters (for example ZIP code, radius, and optional provider filters).
- Set the maximum number of outputs to collect.
- Click Start and wait for the run to finish.
- Download results in JSON, CSV, Excel, or other supported formats.
Scheduling & Automation
Scheduling
Automated Data Collection
You can schedule recurring runs to keep your dataset current without manually starting each job. This is useful for ongoing reporting, enrichment, and monitoring workflows.
- Navigate to Schedules in Apify Console
- Create a new schedule (daily, weekly, or custom cron)
- Configure input parameters
- Enable notifications for run completion
- (Optional) Add webhooks for automated processing
Integration Options
- Webhooks: Trigger downstream actions when a run completes.
- Zapier: Connect to 5,000+ apps without coding.
- Make (Integromat): Build multi-step automation workflows.
- Google Sheets: Export results to a spreadsheet.
- Slack/Discord: Receive notifications and summaries.
- Email: Send automated reports via email.
Performance
Estimated run durations:
- Small runs (< 1,000 outputs): ~2–3 minutes
- Medium runs (1,000–5,000 outputs): ~5–15 minutes
- Large runs (5,000+ outputs): ~15–30 minutes
Execution time varies based on filters, result volume, and how much information is returned per record.
Compliance & Ethics
Responsible Data Collection
This actor collects publicly available <DATA_TYPE> information from {{TARGET_SITE}} for legitimate business purposes, including:
- research and market analysis
- <USE_CASE_2>
- <USE_CASE_3>
Users are responsible for ensuring their collection and downstream use complies with applicable laws, regulations, and contractual obligations. This section is informational and not legal advice.
Best Practices
- Use collected data in accordance with applicable laws, regulations, and the target site’s terms.
- Respect individual privacy and personal information.
- Use data responsibly and avoid disruptive or excessive collection.
- Do not use this actor for spamming, harassment, or other harmful purposes.
- Follow relevant data protection requirements where applicable (e.g., GDPR, CCPA).
Support
If you need help, use the Issues tab or support section on the actor page in Apify Console. Include the input you used (with sensitive values redacted), the run ID, a short expected-vs-actual behavior description, and an optional small output sample so troubleshooting can be faster.