{
  "openapi": "3.0.1",
  "info": {
    "title": "Dental & Clinic Enricher: Insurance, New Patients",
    "description": "accepting_new_patients, insurance_accepted, accepts_medicaid, online_booking_url, hours, services, languages, providers, with evidence quotes for the key facts. Dental, ortho, chiro, vet, med spa, PT, optometry, derm, mental health. $0.02 per practice; free plan: 3 per run without a key.",
    "version": "0.2",
    "x-build-id": "rCMfXwHqq9EJvCAJf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/emulative_capeskin~dental-practice-enricher/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-emulative_capeskin-dental-practice-enricher",
        "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/emulative_capeskin~dental-practice-enricher/runs": {
      "post": {
        "operationId": "runs-sync-emulative_capeskin-dental-practice-enricher",
        "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/emulative_capeskin~dental-practice-enricher/run-sync": {
      "post": {
        "operationId": "run-sync-emulative_capeskin-dental-practice-enricher",
        "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": [
          "practices"
        ],
        "properties": {
          "practices": {
            "title": "Practices",
            "type": "array",
            "description": "Practices to enrich. Each item needs a name and either a website or a city/state so the website can be found. Extra fields (phone, npi, address) are passed through to the output. Rows from Google Maps Scraper (compass/crawler-google-places) work as they are; title, website, phone, address, city, state, placeId are mapped.",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "nullable": true,
                  "title": "Practice name",
                  "description": "Name of the practice."
                },
                "title": {
                  "type": "string",
                  "nullable": true,
                  "title": "Title (Maps rows)",
                  "description": "Name of the place in a Google Maps Scraper row. Used as the name when the item has no name."
                },
                "website": {
                  "type": "string",
                  "nullable": true,
                  "title": "Website URL",
                  "description": "The practice's own website. Leave empty to search for it by name, city and state."
                },
                "city": {
                  "type": "string",
                  "nullable": true,
                  "title": "City",
                  "description": "City of the practice. Used to find the website when none is given and to confirm the site."
                },
                "state": {
                  "type": "string",
                  "nullable": true,
                  "title": "State",
                  "description": "State, e.g. WA. Used to find the website when none is given and to confirm the site."
                },
                "phone": {
                  "type": "string",
                  "nullable": true,
                  "title": "Phone",
                  "description": "Optional. Helps confirm the site belongs to this practice. Passed through to the output."
                },
                "npi": {
                  "type": "string",
                  "nullable": true,
                  "title": "NPI",
                  "description": "Optional NPI number. Passed through to the output."
                },
                "address": {
                  "type": "string",
                  "nullable": true,
                  "title": "Address",
                  "description": "Optional street address. Helps confirm the site belongs to this practice. Passed through to the output."
                },
                "placeId": {
                  "type": "string",
                  "nullable": true,
                  "title": "Google place ID",
                  "description": "Place ID in a Google Maps Scraper row. A practice with a place ID is not looked up on Google Maps again."
                }
              }
            }
          },
          "practiceType": {
            "title": "Practice type",
            "enum": [
              "dental",
              "orthodontics",
              "chiropractic",
              "veterinary",
              "med_spa",
              "physical_therapy",
              "optometry",
              "dermatology",
              "mental_health"
            ],
            "type": "string",
            "description": "What kind of practices the list holds. Tunes what insurance, new patients and booking mean (e.g. pet insurance for veterinary). Output fields are the same for every type.",
            "default": "dental"
          },
          "anthropicApiKey": {
            "title": "Anthropic API key",
            "type": "string",
            "description": "Leave empty on paid plans. On the free Apify plan the first 3 practices of a run are enriched on the Actor's key and the rest are skipped, so add your own key (billed to you by Anthropic) to enrich all of them. Sonnet, Opus, more than 5 pages per site, more than 15,000 characters per page or a higher reasoning effort also need your own key; without it the Actor runs Haiku within those limits."
          },
          "model": {
            "title": "Claude model",
            "enum": [
              "claude-opus-5-5",
              "claude-sonnet-5-5",
              "claude-haiku-5-5"
            ],
            "type": "string",
            "description": "Model used for extraction. Haiku is the default: on 600+ real practices it matched Opus on key facts within the margin of a hand check, at about 1/30 of the cost. Sonnet and Opus run only with your own key in anthropicApiKey; without one the Actor uses Haiku.",
            "default": "claude-haiku-5-5"
          },
          "effort": {
            "title": "Reasoning effort",
            "enum": [
              "low",
              "medium",
              "high"
            ],
            "type": "string",
            "description": "How hard the model thinks per practice. Low is enough for extraction; raise it for messy sites.",
            "default": "low"
          },
          "maxPagesPerSite": {
            "title": "Max pages per site",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Pages read per site, homepage included: the homepage plus the most relevant subpages (insurance, new patients, appointments, contact, hours).",
            "default": 4
          },
          "maxCharsPerPage": {
            "title": "Max characters per page",
            "minimum": 2000,
            "maximum": 40000,
            "type": "integer",
            "description": "Text from each page is cut at this length before extraction.",
            "default": 12000
          },
          "searchForWebsite": {
            "title": "Find website when missing",
            "type": "boolean",
            "description": "When a practice has no website, look it up on Google Maps by name, city and state, by running Google Maps Scraper in your Apify account: up to 3 places at $0.004 each on the free plan (less on paid plans), so at most $0.012 per practice looked up, billed by that Actor on top of this Actor's price. Maps rows are not searched again.",
            "default": true
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Practices processed in parallel.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxies used to fetch practice websites. Residential proxies are not available on the Actor plan: RESIDENTIAL is removed from the proxy groups and Apify Proxy uses its datacenter groups instead. Your own proxy URLs are used as given."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}