# Doctify Scraper (`rigelbytes/doctify-scraper`) Actor

Doctify Scraper lets you extract doctor and practice data from doctify.com using a search results URL. Collect names, profile URLs, images, Google Place links, and optional detailed profile info. Ideal for healthcare research, lead generation, and medical directories. Starting at $0.015 per profile.

- **URL**: https://apify.com/rigelbytes/doctify-scraper.md
- **Developed by:** [Rigel Bytes](https://apify.com/rigelbytes) (community)
- **Categories:** Lead generation, Other, Automation
- **Stats:** 10 total users, 2 monthly users, 88.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Doctify Scraper

**Extract Contact Info** from **doctify.com** with just a search results URL. Get practice names, images, URLs, Google Place links, and detailed profile information — perfect for healthcare market research, lead generation, or building medical directories.

Starting from just **$0.015 per profile**, you can scrape high-quality healthcare provider data with ease.

### Features

- Extract comprehensive doctor/practice details:

  - Name
  - Image URL
  - Practice URL
  - Google Place link
  - Detailed profile information (optional)

- Supports proxies for anonymity and bypassing restrictions
- Fast and reliable scraping with retry mechanisms
- Configurable limit on number of doctors to scrape

### Pricing

This Actor uses **Pay-Per-Event** pricing — you only pay for what you extract.

| Event | Price | Description |
|-------|-------|-------------|
| **Simple Profile** | $0.015 | Basic profile data: name, URL, image, and Google Place link |
| **Detailed Profile** | $0.025 | Full profile including practice details, reviews, and contact information |

#### Examples

- Scraping **1,000 simple profiles** costs approximately **$15**
- Scraping **1,000 detailed profiles** costs approximately **$25**

> 💡 **Tip:** Use simple profiles for quick lead lists, and detailed profiles when you need comprehensive practice information.

---

### Input

The actor accepts the following input:

- **startUrl** (string, required): Doctify search results page URL to scrape doctors from
- **extractDetailedProfiles** (boolean, optional): Whether to extract detailed information from individual doctor profiles (default: false)
- **maxClinics** (integer, optional): Maximum number of Clinics to scrape. Set to 0 for unlimited (default: 0)
- **proxyConfiguration** (object, optional): Proxy settings for enhanced scraping

#### 📝 Copy for Use:

```json
{
  "startUrl": "https://www.doctify.com/uk/find/dentistry/london/practices#location=London&distance=50",
  "extractDetailedProfiles": false,
  "maxClinics": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
````

***

### Why Choose This Scraper?

- **Affordable**: Pay-per-event pricing — only pay for what you extract
- **Easy to Use**: Simple setup and integration with the Apify platform
- **Reliable**: Built with retry mechanisms to handle network issues

***

### Recommended Proxy Providers

- ## **Shifter**

  - Reliable residential proxies all over the world.
  - Cheap rates
  - [Order Shifter Now](https://shifter.io/r/YoBB/order)
  - Get 10% Off any product, use coupan `rigelbytes-YoBB`.

- ## **OxyLabs**

  - **100M+ Proxies**
  - Fastest proxies in the market
  - Real profile, human-like Residential IPs
  - Quality assurance framework for most reliable IPs
  - [Get Proxies](https://oxylabs.go2cloud.org/aff_c?offer_id=7\&aff_id=1366\&url_id=7)

- ## **DataImpulse**

  - Covers **200+ Counties**
  - Reliable Residential Proxies for just $1/GB
  - [Get Residential Proxies](https://dataimpulse.com/?aff=89421)

### [![Learn More About Proxies](https://img.shields.io/badge/Learn_More-About_Proxies-blue?style=for-the-badge)](#understanding-proxies)

### 🙌 Why Buy Through Our Affiliate Link?

- Exclusive Deals: Some providers may offer special discounts or bonuses when you use our link.
- Support Our Work: Each purchase helps us maintain and improve the tools and services we provide.
- No Extra Cost: You pay the same price, but part of it goes to supporting our efforts.

#### Running via Apify Console

You can run this actor from the Apify Console by providing the necessary input parameters.

#### Running via API

You can trigger this actor using the Apify API, passing the required input in the request body.

### API Request Example (Python)

```python
from apify_client import ApifyClient

## Initialize the ApifyClient with your API token
client = ApifyClient("<YOUR_API_TOKEN>")

## Prepare the Actor input
run_input = {
  "startUrl": "https://www.doctify.com/uk/find/dentistry/london/practices#location=London&distance=50",
  "extractDetailedProfiles": false,
  "maxClinics": 0,
}

## Run the Actor and wait for it to finish
run = client.actor("rigelbytes/doctify-scraper").call(run_input=run_input)
```

### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your API token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
  "startUrl": "https://www.doctify.com/uk/find/dentistry/london/practices#location=London&distance=50",
  "extractDetailedProfiles": false,
  "maxClinics": 0,
};

(async () => {
    // Run the Actor and wait for it to finish
    const run = await client.actor("rigelbytes/doctify-scraper").call(input);
})();
```

### Running with cURL

```shell
## Set API token
API_TOKEN=<YOUR_API_TOKEN>

## Prepare Actor input
cat > input.json <<'EOF'
{
  "startUrl": "https://www.doctify.com/uk/find/dentistry/london/practices#location=London&distance=50",
  "extractDetailedProfiles": false,
  "maxClinics": 0,
}
EOF

## Run the Actor
curl "https://api.apify.com/v2/acts/rigelbytes/doctify-scraper/runs?token=$API_TOKEN" \
  -X POST \
  -d @input.json \
  -H 'Content-Type: application/json'
```

- ## Output
  ![Output](https://github.com/faizanalii/apify-images/blob/main/doctify-scraper.gif?raw=true)

### [![View Detailed Data](https://img.shields.io/badge/Detailed-Data-green?style=for-the-badge)](#detailed-data)

### 🚀 Other Tools by Rigel Bytes

[![Airbnb Images Downloader](https://img.shields.io/badge/Airbnb_Images_Downloader-blue?style=for-the-badge)](https://apify.com/rigelbytes/airbnb-images-downloader)\
A focused Airbnb image scraper that extracts all photos from an Airbnb listing page and packages the listing's image files into a compressed archive. The Act...

[![Zillow Scraper](https://img.shields.io/badge/Zillow_Scraper-green?style=for-the-badge)](https://apify.com/rigelbytes/zillow-scraper)\
A Zillow-focused web scraper that extracts structured property listing data for real estate analysis and monitoring. The Actor crawls Zillow listings to coll...

[![Zillow Detail Scraper](https://img.shields.io/badge/Zillow_Detail_Scraper-orange?style=for-the-badge)](https://apify.com/rigelbytes/zillow-detail-scraper)\
Zillow scraper with customizable proxy support. Extract comprehensive property data, including pricing, images, and location details, using your proxies for better control and efficiency. Check the recommended proxy providers below.

[![Daraz](https://img.shields.io/badge/Daraz-blueviolet?style=for-the-badge)](https://apify.com/rigelbytes/daraz)\
A web scraping Actor that extracts product listings and detailed product and seller data from Daraz.pk (Pakistan ecommerce marketplace) for monitoring and an...

[![Airbnb Listing](https://img.shields.io/badge/Airbnb_Listing-red?style=for-the-badge)](https://apify.com/rigelbytes/airbnb-listing)\
A web-scraping Actor that bulk-extracts structured Airbnb listing data from listing pages: it retrieves listing metadata, descriptive content, property featu...

[![Google Maps Scraper](https://img.shields.io/badge/Google_Maps_Scraper-yellow?style=for-the-badge)](https://apify.com/rigelbytes/google-maps-scraper)\
A Google Maps scraping Actor that extracts structured business profiles and local place intelligence at scale: it crawls Google Maps listings to collect busi...

[![Airbnb Availability Calendar](https://img.shields.io/badge/Airbnb_Availability_Calendar-purple?style=for-the-badge)](https://apify.com/rigelbytes/airbnb-availability-calendar)\
Exports Airbnb listing availability calendars by scraping listing pages and producing structured, per-date calendar data. The Actor extracts date entries and...

[![Instagram Profile Scraper](https://img.shields.io/badge/Instagram_Profile_Scraper-pink?style=for-the-badge)](https://apify.com/rigelbytes/instagram-profile-scraper)\
A web-scraping Actor that extracts detailed Instagram profile and media metadata from profile pages: it retrieves profile-level metrics (follower/following c...

[![Land.com Scraper](https://img.shields.io/badge/Land.Com_Scraper-cyan?style=for-the-badge)](https://apify.com/rigelbytes/landdotcom-scraper)\
A Land.com-focused web scraper that crawls Land.com property listings and extracts structured real estate data for specified geographic areas and listing typ...

[![Airbnb Reviews](https://img.shields.io/badge/Airbnb_Reviews-success?style=for-the-badge)](https://apify.com/rigelbytes/airbnb-reviews)\
A web-scraping Actor that extracts unlimited reviews from Airbnb listings: it crawls listing review pages and produces structured review records containing r...

[![FurnishedFinder](https://img.shields.io/badge/Furnishedfinder-important?style=for-the-badge)](https://apify.com/rigelbytes/furnishedfinder)\
A web-scraping Actor designed to extract large-scale furnished rental data from Furnished Finder: it crawls listing pages to collect listing metadata (proper...

[![Immobilienscout24](https://img.shields.io/badge/Immobilienscout24-critical?style=for-the-badge)](https://apify.com/rigelbytes/immobilienscout24)\
A scraper for immobilienscout24.de that extracts large-scale real estate listing data and contact information, optimized for bulk property data collection, i...

[![Airbnb Listing Urls](https://img.shields.io/badge/Airbnb_Listing_Urls-informational?style=for-the-badge)](https://apify.com/rigelbytes/airbnb-listing-urls)\
A web scraper that extracts unlimited Airbnb listings from search queries and returns structured listing metadata for analysis. The Actor crawls Airbnb searc...

[![Instagram Engagement Tool](https://img.shields.io/badge/Instagram_Engagement_Tool-9cf?style=for-the-badge)](https://apify.com/rigelbytes/instagram-engagement-tool)\
Analyzes public Instagram profiles by scraping recent posts and profile metadata to compute engagement metrics for images and videos. The Actor extracts prof...

[![Instagram Post Scraper](https://img.shields.io/badge/Instagram_Post_Scraper-blue?style=for-the-badge)](https://apify.com/rigelbytes/instagram-post-scraper)\
An Instagram scraping Actor that extracts every post from Instagram profiles and produces structured post-level metadata and media assets for social media an...

[![BBB Scraper](https://img.shields.io/badge/Bbb_Scraper-green?style=for-the-badge)](https://apify.com/rigelbytes/bbb-scraper)\
A web-scraping Actor that extracts detailed business listings from the Better Business Bureau (BBB). It crawls BBB listings and produces structured business ...

[![Linkedin Company Scraper](https://img.shields.io/badge/Linkedin_Company_Scraper-orange?style=for-the-badge)](https://apify.com/rigelbytes/linkedin-company-scraper)\
A LinkedIn Company Scraper that extracts structured company profile data from LinkedIn company pages for lead generation and competitive intelligence. The Ac...

[![linkedin-company-details](https://img.shields.io/badge/Linkedin_Company_Details-blueviolet?style=for-the-badge)](https://apify.com/rigelbytes/linkedin-company-details)\
A LinkedIn Company Scraper for extracting comprehensive company profiles and social content from LinkedIn: it scrapes and returns structured company profile ...

[![Instagram Reel Scraper](https://img.shields.io/badge/Instagram_Reel_Scraper-red?style=for-the-badge)](https://apify.com/rigelbytes/instagram-reel-scraper)\
A web-scraping Actor that extracts all Instagram Reels from public profiles and produces structured reel-level metadata for content analysis, research, and m...

[![Rottentomatoes Reviews Scraper](https://img.shields.io/badge/Rottentomatoes_Reviews_Scraper-yellow?style=for-the-badge)](https://apify.com/rigelbytes/rottentomatoes-reviews-scraper)\
A web-scraping Apify Actor that extracts user and critic reviews from Rotten Tomatoes pages, producing structured review records for analysis. It crawls unli...

[![Extract Furnished Finder Hosts](https://img.shields.io/badge/Extract_Furnished_Finder_Hosts-purple?style=for-the-badge)](https://apify.com/rigelbytes/furnished-finder-hosts)\
Scrapes Furnished Finder listings and extracts structured listing and host profile data for furnished rentals, including listing titles, property types, geol...

[![Trustpilot Reviews Scraper](https://img.shields.io/badge/Trustpilot_Reviews_Scraper-pink?style=for-the-badge)](https://apify.com/rigelbytes/trustpilot-reviews)\
A Trustpilot review scraper that collects structured review records and full reviewer profile data at scale. It extracts review content (titles and body text...

[![Furnished Finder Fast](https://img.shields.io/badge/Furnished_Finder_Fast-cyan?style=for-the-badge)](https://apify.com/rigelbytes/furnished-finder-fast)\
An Apify Actor for scraping Furnished Finder rental listings and optional host profiles, extracting structured listing data such as photos, textual descripti...

[![Zillow Agents](https://img.shields.io/badge/Zillow_Agents-success?style=for-the-badge)](https://apify.com/rigelbytes/zillow-agents)\
A Zillow agent profile scraper that extracts structured agent data from Zillow for location-based queries (city, neighborhood, ZIP). The Actor scrapes agent ...

[![Bayut Scraper](https://img.shields.io/badge/Bayut_Scraper-important?style=for-the-badge)](https://apify.com/rigelbytes/bayut-scraper)\
A web-scraping Actor for extracting structured property listings and market intelligence from Bayut.com (UAE). It crawls Bayut property pages and returns str...

[![dubai-listing-scraper](https://img.shields.io/badge/Dubai_Listing_Scraper-critical?style=for-the-badge)](https://apify.com/rigelbytes/dubai-listing-scraper)\
A web scraping Actor for Bayut.com that extracts structured UAE property listing data for sale and rent across Dubai, Abu Dhabi and other Emirates. It progra...

[![Tiktok Comment Scraper](https://img.shields.io/badge/Tiktok_Comment_Scraper-informational?style=for-the-badge)](https://apify.com/rigelbytes/tiktok-comment-scraper)\
A TikTok comment scraping Actor that extracts all comments from TikTok videos given a video URL. It collects commenter metadata (usernames, display names, pr...

[![Tiktok Engagement Rate](https://img.shields.io/badge/Tiktok_Engagement_Rate-9cf?style=for-the-badge)](https://apify.com/rigelbytes/tiktok-engagement-rate)\
A TikTok profile scraper that analyzes public TikTok accounts to extract profile metadata and recent video-level interaction metrics and to compute engagemen...

[![Company Service Finder](https://img.shields.io/badge/Company_Service_Finder-blue?style=for-the-badge)](https://apify.com/rigelbytes/company-service-finder)\
Company Service Finder scrapes business listings from Google Search and Google Maps across cities and states, extracts company websites, names, phone numbers...

[![Website Services Finder](https://img.shields.io/badge/Website_Services_Finder-green?style=for-the-badge)](https://apify.com/rigelbytes/website-services-finder)\
Website Services Finder extracts and AI-analyzes company services and business information from business websites using web crawling plus large-language and ...

[![Airbnb Address Finder](https://img.shields.io/badge/Airbnb_Address_Finder-orange?style=for-the-badge)](https://apify.com/rigelbytes/airbnb-address-finder)\
A web-scraping Apify Actor that bulk-extracts Airbnb listing addresses and comprehensive listing metadata from provided Airbnb listing URLs. It parses listin...

[![Immowelt Scraper](https://img.shields.io/badge/Immowelt_Scraper-blueviolet?style=for-the-badge)](https://apify.com/rigelbytes/immowelt-scraper)\
An Apify Actor that scrapes unlimited real estate listings from immowelt.de and returns structured property data for indexing and analysis. The Actor extract...

[![Propertyfinder Scraper](https://img.shields.io/badge/Propertyfinder_Scraper-red?style=for-the-badge)](https://apify.com/rigelbytes/propertyfinder-scraper)\
A scraper for propertyfinder.ae that extracts unlimited real estate listings and related metadata at scale. Implements asynchronous concurrency, automatic re...

[![Publix Scraper](https://img.shields.io/badge/Publix_Scraper-yellow?style=for-the-badge)](https://apify.com/rigelbytes/publix-scraper)\
A web scraping Actor for Publix.com that extracts grocery product data from Publix collection pages using a collection URL and a delivery/pickup location to ...

[![Redfin Scraper](https://img.shields.io/badge/Redfin_Scraper-purple?style=for-the-badge)](https://apify.com/rigelbytes/redfin-scraper)\
Redfin Scraper extracts large-scale real estate listing data from Redfin search and city pages and returns structured property records for downstream analysi...

[![Instacart Scraper](https://img.shields.io/badge/Instacart_Scraper-pink?style=for-the-badge)](https://apify.com/rigelbytes/instacart-scraper)\
A web-scraping Actor that extracts structured product data from instacart.com using a collection/search keyword combined with a delivery or pickup location; ...

[![Homedepot Scraper](https://img.shields.io/badge/Homedepot_Scraper-cyan?style=for-the-badge)](https://apify.com/rigelbytes/homedepot-scraper)\
A web scraper for homedepot.com that crawls collection pages and performs location-aware scraping (delivery or pickup) to extract structured product data. Th...

[![Facebook Ads Scraper](https://img.shields.io/badge/Facebook_Ads_Scraper-success?style=for-the-badge)](https://apify.com/rigelbytes/facebook-ads-scraper)\
Extracts structured ad data from the Facebook Ads Library using a search URL: scrapes ad metadata and creative assets (ad copy, titles, captions), destinatio...

[![Ticketmaster Scraper](https://img.shields.io/badge/Ticketmaster_Scraper-important?style=for-the-badge)](https://apify.com/rigelbytes/ticketmaster-scraper)\
A Ticketmaster-focused web scraper that extracts structured event metadata by location and date range for event monitoring, market research, and entertainmen...

[![Scrape Instagram Creators](https://img.shields.io/badge/Scrape_Instagram_Creators-critical?style=for-the-badge)](https://apify.com/rigelbytes/scrape-instagram-creators)\
Scrape Instagram Creators is an Instagram profile and media scraper that extracts detailed creator profile metadata and media-level information. It captures ...

[![Immowelt Property Scraper](https://img.shields.io/badge/Immowelt_Property_Scraper-informational?style=for-the-badge)](https://apify.com/rigelbytes/immowelt-property-scraper)\
A scraper for immowelt.de (Germany) that harvests large volumes of real estate listings and returns structured property records for analysis. It extracts lis...

[![Immobilienscout24-scraper](https://img.shields.io/badge/Immobilienscout24_Scraper-9cf?style=for-the-badge)](https://apify.com/rigelbytes/immobilienscout24-scraper)\
A web scraping Actor that extracts large volumes of real estate listings and contact information from immobilienscout24.de, focused on German property market...

[![Instagram Creator Stats](https://img.shields.io/badge/Instagram_Creator_Stats-blue?style=for-the-badge)](https://apify.com/rigelbytes/instagram-creator-stats)\
A scraping and analytics Actor that extracts Instagram profile metadata and per-post media details to compute engagement metrics for creator/influencer analy...

[![Etsy Scraper](https://img.shields.io/badge/Etsy_Scraper-green?style=for-the-badge)](https://apify.com/rigelbytes/etsy-scraper)\
A web-scraping Actor that extracts structured product data from Etsy.com from category pages, search results, or individual product list URLs. It crawls list...

[![Rightmove Scraper](https://img.shields.io/badge/Rightmove_Scraper-orange?style=for-the-badge)](https://apify.com/rigelbytes/rightmove-scraper)\
Scrapes Rightmove.co.uk property listings and returns structured property records for real estate data extraction and analysis. The Actor crawls Rightmove se...

[![Outdoorsy Scraper](https://img.shields.io/badge/Outdoorsy_Scraper-blueviolet?style=for-the-badge)](https://apify.com/rigelbytes/outdoorsy-scraper)\
A web scraping Actor that extracts rental listing data from outdoorsy.com search result pages. It processes multiple search result URLs in a single run, issu...

[![Instagram Comment Scraper](https://img.shields.io/badge/Instagram_Comment_Scraper-red?style=for-the-badge)](https://apify.com/rigelbytes/instagram-comment-scraper)\
A web scraping Actor that extracts all comments from Instagram posts and reels given their URLs; it captures commenter metadata (username, display name, prof...

### Understanding Proxies:

When scraping data or browsing anonymously, proxies are essential. They act as intermediaries, masking your original IP address and allowing you to send requests from another location.

#### Why Use Proxies?

- Avoid IP Blocks: By routing requests through proxies, you prevent the target website from recognizing your IP as a scraper or spammer.
- Access Geo-restricted Content: Proxies let you access content or websites restricted by location.
- Enhance Anonymity: Hide your actual IP, ensuring privacy while scraping or browsing.

#### Types of Proxies

1. Residential Proxies
   - Real IP addresses provided by ISPs to home users.
   - They mimic regular users, making them harder to detect.
   - Best for: Long-term, undetectable scraping, and avoiding blocks.
2. Data Center Proxies
   - IP addresses from servers in data centers.
   - Faster and cheaper than residential proxies but easier to detect and block.
   - Best for: High-speed scraping, but with a higher risk of detection.
3. Mobile Proxies
   - IPs provided by mobile carriers (3G/4G/5G networks).
   - Very difficult to detect, as they appear as regular mobile users.
   - Best for: Mobile-related scraping or avoiding sophisticated blocks.

#### Rotating Proxies vs. Straight Proxies

- Rotating Proxies: Every request you send goes through a different proxy, making it harder for websites to detect patterns.
- Straight Proxies: All requests are sent through the same proxy, making it easier to track your IP.

### About Rigel Bytes

Rigel Bytes specializes in web scraping, automation, and data analytics. We help businesses extract and leverage valuable data for informed decision-making.

### Contact Us

Ready to unlock the power of data? Reach out to us at (contact@rigelbytes.com) or [book an appointment](https://cal.com/faizanali/appointments) with us to learn more about how we can help you achieve your data goals.

### Detailed Data

```json
[
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/southfields_dental_centre/southfields_dental_centre.0.jpg",
    "url": "https://www.doctify.com/uk/practice/southfields-dental-centre",
    "name": "Southfields Dental Centre",
    "phone": "+442087888050",
    "email": "Info@southfieldsdental.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJDYXy7EYPdkgR3YOj1HZpxho"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/happy_kids_dental_practice/happy_kids_dental_practice22464029-6511-4878-880d-55d7a3785e83.png",
    "url": "https://www.doctify.com/uk/practice/happy-kids-dental-practice",
    "name": "Happy Kids Dental Chelsea",
    "phone": "+442070780822",
    "email": "chelsea@happykidsdental.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJS1p8kxUFdkgRV9OXlGsqHXs"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/london_bridge_dental_practice_1/london_bridge_dental_practice_1.0.jpg",
    "url": "https://www.doctify.com/uk/practice/london-bridge-dental-practice-1",
    "name": "London Bridge Dental Practice",
    "phone": "+442074071920",
    "email": "lbdentalpractice@aol.com",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJqTr6qFoDdkgRmxFgODPSpuo"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/riverside_dental_spa_6/riverside_dental_spa_661c9eb68-4e38-4c2d-aaa0-3d41ea7f49f9.png",
    "url": "https://www.doctify.com/uk/practice/riverside-dental-spa-6",
    "name": "Riverside Dental Spa",
    "phone": "+442070910677",
    "email": "reception@riversidedentalspa.com",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJFQZLUu4EdkgR4qDiHN-Cy7Y"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/moira_wong_orthodontics/moira_wong_orthodontics6d8a318b-feab-4fbc-9ee2-e2dc58f9806f.png",
    "url": "https://www.doctify.com/uk/practice/moira-wong-orthodontics",
    "name": "Moira Wong Orthodontics",
    "phone": "+442073686611",
    "email": "info@moirawongorthodontics.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJ0fYhafcPdkgRuF6sFDKPulM"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/maida-smiles-clinic/maida-smiles-clinic8f74483b-ad4c-48ad-bf3f-dde44bdf8171.png",
    "url": "https://www.doctify.com/uk/practice/maida-smiles-clinic",
    "name": "Maida Smiles Dental Clinic",
    "phone": "+442035839809",
    "email": "info@maidasmiles.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJmVuarzUbdkgRoUGwfIEU0rg"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/dental-beauty-lee/dental-beauty-lee86421def-fecc-45b8-989d-da7e82ee3caf.png",
    "url": "https://www.doctify.com/uk/practice/dental-beauty-lee",
    "name": "Dental Beauty Lee",
    "phone": "+442088524055",
    "email": "preeya@dentalbeautypartners.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJ98y_892p2EcRxFqx7wE8KjA"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/omid-sobhani-dental-practice/omid-sobhani-dental-practice2292d337-391c-44d0-bf2a-8155752df57b.png",
    "url": "https://www.doctify.com/uk/practice/omid-sobhani-dental-practice",
    "name": "Omidentistry Limited",
    "phone": "+442079357343",
    "email": "reception@omidsobhani.com",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJz6T_RtEadkgRm4nhuRybK8Q"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/poland-medical/poland-medical01af4a72-e32a-464f-b6f3-4e5061d0c566.png",
    "url": "https://www.doctify.com/uk/practice/poland-medical",
    "name": "Poland Medical",
    "phone": "+442089034874",
    "email": "info@polandmedical.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJq048TqgddkgR3570GJwwvqE"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/boston-orthodontics/boston-orthodonticseaec8529-1ce8-47fc-a4ae-eea2cbea56d0.png",
    "url": "https://www.doctify.com/uk/practice/boston-orthodontics",
    "name": "Boston Orthodontics Dental and Facial Aesthetics",
    "phone": "+447767270053",
    "email": "info@bostonorthodontics.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJ80Ugx44bdkgRV5zu53vNudE"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/k-dental-studios/k-dental-studiose445b5ca-1ba1-4892-9bf8-3dd91ad60ea0.png",
    "url": "https://www.doctify.com/uk/practice/k-dental-studios",
    "name": "K Dental Studios",
    "phone": "",
    "email": "info@kdentalstudios.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJzWQa5tUadkgR6l0kckFd2Pg"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/pure_periodontics/pure_periodontics.1.jpg",
    "url": "https://www.doctify.com/uk/practice/pure-periodontics",
    "name": "Pure Periodontics Limited",
    "phone": "+442072477400",
    "email": "info@pureperio.com",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJNx_yr7McdkgRe92kJGmLL4E"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/quality_dental_care_fulham/quality_dental_care_fulham95ecf6bc-5c01-4dd9-9ca5-2830b79ba9df.png",
    "url": "https://www.doctify.com/uk/practice/quality-dental-care-fulham",
    "name": "Quality Dental : Fulham",
    "phone": "+442073850113",
    "email": "reception@fulhamdental.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJH8OiXJAPdkgRPDnPnXeP6hw"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/cosmo_dental_practice/cosmo_dental_practice.0.jpg",
    "url": "https://www.doctify.com/uk/practice/cosmo-dental-practice",
    "name": "Cosmo Clinic",
    "phone": "+442077396574",
    "email": "info@cosmo-clinic.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJDWLu2b0cdkgR9VBK7EiVCO8"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/the-modern-dentist-shoreditch/the-modern-dentist-shoreditch58714f67-a5db-4c58-9c02-c7eb8030ab15.png",
    "url": "https://www.doctify.com/uk/practice/the-modern-dentist-shoreditch",
    "name": "The Modern Dentist",
    "phone": "+442039499889",
    "email": "hello@themoderndentist.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:EiExIExlb25hcmQgU3QsIExvbmRvbiBFQzJBIDRRUywgVUsiMBIuChQKEglPNGLurxx2SBEm5UrYRmlMNhABKhQKEgnllfuQrxx2SBEa5CSpIi9kRg"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/bell_yard_dental_surgery_1/bell_yard_dental_surgery_10a8d6604-f188-4a50-b322-d50aa12a9635.png",
    "url": "https://www.doctify.com/uk/practice/bell-yard-dental-surgery-1",
    "name": "Bell Yard Dental Surgery",
    "phone": "+442078311002",
    "email": "info@bellyarddental.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJ764tprQEdkgRSM-fAhozDls"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/the-one-to-one-dental-clinic/the-one-to-one-dental-clinica057665c-caec-49ed-b722-c0770593083e.png",
    "url": "https://www.doctify.com/uk/practice/the-one-to-one-dental-clinic",
    "name": "The One to One Dental Clinic",
    "phone": "+442074860000",
    "email": "121dentalreception@gmail.com",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJh_1v-tMadkgRwJnEYUnDe5I"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/happy_kids_dental/happy_kids_dental2ba3a6d6-1d05-4a2c-b83e-d0310b62afb0.png",
    "url": "https://www.doctify.com/uk/practice/happy-kids-dental",
    "name": "Happy Kids Dental Marylebone",
    "phone": "",
    "email": "info@happykidsdental.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJoRjARsoadkgRijQWKGpS5lA"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/harley_street_dental_clinic/harley_street_dental_clinic.0.jpg",
    "url": "https://www.doctify.com/uk/practice/harley-street-dental-clinic",
    "name": "Harley Street Dental Clinic",
    "phone": "+442074861059",
    "email": "enquiries@hsdc.net",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJzx9qHNEadkgRaTAVY25HIS4"
  },
  {
    "imageUrl": "https://www.doctify.com/public/images/athena-uk/practice/cover/sparklysmile_dental_practice/sparklysmile_dental_practice.0.jpg",
    "url": "https://www.doctify.com/uk/practice/sparklysmile-dental-practice",
    "name": "Sparklysmile Dental Practice",
    "phone": "+442088520442",
    "email": "phil@sparklysmile.co.uk",
    "googleplace": "https://www.google.com/maps/place/?q=place_id:ChIJAcFod9Gp2EcRpQg1WSfDOU4"
  }
]
```

# Actor input Schema

## `startUrl` (type: `string`):

The URL to start scraping from. It should be a Doctify search results page URL.

## `extractDetailedProfiles` (type: `boolean`):

Whether to extract detailed information from individual doctor profiles.

## `maxClinics` (type: `integer`):

The maximum number of clinics to scrape. Set to 0 to scrape all clinics.

## `proxyConfiguration` (type: `object`):

Select proxy groups or use your custom proxies

## Actor input object example

```json
{
  "startUrl": "https://www.doctify.com/uk/find/dentistry/london/practices/page-2#location=London&distance=50",
  "extractDetailedProfiles": false,
  "maxClinics": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxClinics": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("rigelbytes/doctify-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxClinics": 100 }

# Run the Actor and wait for it to finish
run = client.actor("rigelbytes/doctify-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxClinics": 100
}' |
apify call rigelbytes/doctify-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=rigelbytes/doctify-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Doctify Scraper",
        "description": "Doctify Scraper lets you extract doctor and practice data from doctify.com using a search results URL. Collect names, profile URLs, images, Google Place links, and optional detailed profile info. Ideal for healthcare research, lead generation, and medical directories. Starting at $0.015 per profile.",
        "version": "0.0",
        "x-build-id": "8q2jgwr5ZLcbkfloO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/rigelbytes~doctify-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-rigelbytes-doctify-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/rigelbytes~doctify-scraper/runs": {
            "post": {
                "operationId": "runs-sync-rigelbytes-doctify-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/rigelbytes~doctify-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-rigelbytes-doctify-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrl"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "The URL to start scraping from. It should be a Doctify search results page URL.",
                        "default": "https://www.doctify.com/uk/find/dentistry/london/practices/page-2#location=London&distance=50"
                    },
                    "extractDetailedProfiles": {
                        "title": "Extract detailed profiles",
                        "type": "boolean",
                        "description": "Whether to extract detailed information from individual doctor profiles.",
                        "default": false
                    },
                    "maxClinics": {
                        "title": "Maximum number of clinics to scrape",
                        "type": "integer",
                        "description": "The maximum number of clinics to scrape. Set to 0 to scrape all clinics.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxy groups or use your custom proxies",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
