{
  "openapi": "3.0.1",
  "info": {
    "title": "Prospect Buddy for HighLevel",
    "description": "Local businesses from Google Maps with the owner, a checked email and Do Not Call-checked phones. Pay only for what’s found. Saves to HighLevel.",
    "version": "0.1",
    "x-build-id": "3QhQraEhXHNI02ge7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jarid_orgeron~prospect-buddy/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jarid_orgeron-prospect-buddy",
        "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/jarid_orgeron~prospect-buddy/runs": {
      "post": {
        "operationId": "runs-sync-jarid_orgeron-prospect-buddy",
        "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/jarid_orgeron~prospect-buddy/run-sync": {
      "post": {
        "operationId": "run-sync-jarid_orgeron-prospect-buddy",
        "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",
        "properties": {
          "searchTerms": {
            "title": "What businesses",
            "type": "array",
            "description": "As you'd type into Google Maps, e.g. roofer, electrician, med spa.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "City",
            "type": "string",
            "description": "City and state, e.g. Omaha, NE. Searches the city limits."
          },
          "datasetId": {
            "title": "Or: an existing Google Maps Scraper dataset",
            "type": "string",
            "description": "Use the results of a Google Maps Scraper run you already have instead of a new search."
          },
          "area": {
            "title": "Area",
            "enum": [
              "city",
              "15mi",
              "25mi"
            ],
            "type": "string",
            "description": "City limits is the boundary Google Maps draws for the city. The circles take in the suburbs around downtown.",
            "default": "city"
          },
          "areaListSize": {
            "title": "Businesses to list in the area",
            "minimum": 10,
            "maximum": 200,
            "type": "integer",
            "description": "A new area is listed first (name, rating, website only; about $0.004 each) so later runs can continue where this one stopped. Fewer than this means every business in the area was found.",
            "default": 100
          },
          "areaListDatasetId": {
            "title": "Continue an area: its list",
            "type": "string",
            "description": "The list dataset of an earlier run (the Prospect Buddy log's Dataset ID). Researches the next businesses from it instead of searching again. If it's gone, the area is listed again."
          },
          "areaStart": {
            "title": "Continue an area: start at",
            "minimum": 0,
            "type": "integer",
            "description": "Position in the list to continue from (the log's Next Offset)."
          },
          "goal": {
            "title": "Goal",
            "enum": [
              "none",
              "owner_email",
              "valid_email",
              "verified_email",
              "owner_name",
              "owner_cell",
              "callable_phone",
              "callable_cell",
              "any_email"
            ],
            "type": "string",
            "description": "With a goal, the actor researches the area in rounds of 10 until the goal is met, the area runs out, or Max businesses is reached. Every business researched is returned, met or not.",
            "default": "none"
          },
          "alsoRequire": {
            "title": "Goal: also require",
            "type": "array",
            "description": "More things a business must have to count toward the goal, e.g. Goal = valid emails and Also require = Phone not on Do Not Call. A business counts only when it has all of them. Every business researched is still returned.",
            "items": {
              "type": "string",
              "enum": [
                "owner_email",
                "valid_email",
                "verified_email",
                "owner_name",
                "owner_cell",
                "callable_phone",
                "callable_cell"
              ],
              "enumTitles": [
                "Owner email",
                "Valid email (catch-all included)",
                "Verified email",
                "Owner named",
                "Cell phone",
                "Phone not on Do Not Call",
                "Cell phone not on Do Not Call"
              ]
            }
          },
          "goalCount": {
            "title": "Goal: how many",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "N for the goal above."
          },
          "roundSize": {
            "title": "Businesses per round",
            "minimum": 5,
            "maximum": 50,
            "type": "integer",
            "description": "With a goal: how many to research before checking the goal again. Smaller rounds stop closer to the goal; larger ones are a little faster.",
            "default": 10
          },
          "excludeDatasetIds": {
            "title": "Skip businesses already researched",
            "type": "array",
            "description": "Results datasets of earlier runs. Businesses in them are skipped (not researched or charged again), e.g. when a search grows from city limits to a 15-mile circle.",
            "items": {
              "type": "string"
            }
          },
          "recheckAfterDays": {
            "title": "Skip businesses researched in the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Every business a run researches, and every area list, is remembered in a named store in your own Apify account (prospect-buddy-history), which never expires. Later runs skip businesses researched within this many days, in any area or niche, so you never pay to research the same business twice; an area listed within this many days is not listed again. 0 turns the memory off. Left empty, it's 90. (The page pre-fills 0 so Apify's daily health check can re-run the same 2 businesses.)",
            "default": 90
          },
          "maxBusinesses": {
            "title": "Max businesses",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "The most to research this run (with a goal, the spending cap): from the top of the area's list, or from where the last run stopped (Continue an area). Free Apify plans are limited to 25 per run and 500 a month.",
            "default": 25
          },
          "maxCostUsd": {
            "title": "Spending cap (USD)",
            "minimum": 0,
            "type": "number",
            "description": "The most this search may cost you in Apify charges (this actor, Google Maps, email checks). The search stops before going over it. Prospect Buddy sets it to the quote's maximum."
          },
          "quoteOnly": {
            "title": "Quote only",
            "type": "boolean",
            "description": "Don't search: return what this search would cost (a maximum and a likely figure from your earlier searches) in a few seconds.",
            "default": false
          },
          "offers": {
            "title": "Offers to score",
            "type": "array",
            "description": "The HighLevel services you sell. Every business is scored against all of them; these come first and pick the best offer. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "reviews",
                "ai_receptionist",
                "missed_call_text_back",
                "lead_follow_up",
                "website",
                "local_seo",
                "chat_widget",
                "booking",
                "email_sms_marketing",
                "social"
              ],
              "enumTitles": [
                "Review management",
                "AI receptionist",
                "Missed-call text-back",
                "Lead follow-up automation",
                "Website design",
                "Local SEO / Google Business Profile",
                "AI chat widget",
                "Online booking",
                "Email and SMS marketing",
                "Social media management"
              ]
            }
          },
          "peopleAddon": {
            "title": "Staff lookups per business (Google Maps people add-on)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Names, titles and work emails from the Maps scraper's people add-on, merged with the website. Billed by the Maps scraper to your account: about $0.005 a person on paid plans ($0.10 on free, so it's off on free plans). Search mode only.",
            "default": 5
          },
          "reviewsToCheck": {
            "title": "Newest reviews to check",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "For the review checks (owner replies, last review date, complaints about not calling back). Billed by the Maps scraper: about $0.0005 a review plus $0.002 a business for details. Search mode only.",
            "default": 10
          },
          "checkPhones": {
            "title": "Check phone numbers",
            "enum": [
              "owners",
              "all"
            ],
            "type": "string",
            "description": "Every phone number is checked before you see it: line type (mobile, landline, VoIP), carrier, and Do Not Call status (Federal and State DNC lists, known TCPA litigators), US and Canada numbers. It can't be turned off: a number that couldn't be checked is never shown or saved. Charged per number checked (phone-checked). The checks are included in the price of each business researched. On Apify's free plan: 50 phone checks in all; after that, numbers come back unchecked with a warning on each to check it before calling.",
            "default": "owners"
          },
          "maxPagesPerSite": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Pages linked from the homepage. Most local sites have fewer.",
            "default": 30
          },
          "useProxyForBlocked": {
            "title": "Use a proxy for sites with bot checks",
            "type": "boolean",
            "description": "Only for sites that refuse a normal browser.",
            "default": true
          },
          "aiModel": {
            "title": "AI model",
            "type": "string",
            "description": "Model that sorts contacts.",
            "default": "gpt-6-luna"
          },
          "excludeCategories": {
            "title": "Skip categories containing",
            "type": "array",
            "description": "e.g. supply, wholesale. Matched against the Google categories.",
            "items": {
              "type": "string"
            }
          },
          "onePerWebsite": {
            "title": "One row per website",
            "type": "boolean",
            "description": "Chains list the same website on every branch; keep only the first.",
            "default": true
          },
          "minRating": {
            "title": "Min rating",
            "type": "number",
            "description": "Skip businesses rated below this."
          },
          "maxRating": {
            "title": "Max rating",
            "type": "number",
            "description": "Skip businesses rated above this (e.g. 4.3 to find reputation prospects)."
          },
          "minReviews": {
            "title": "Min reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Skip businesses with fewer reviews."
          },
          "maxReviews": {
            "title": "Max reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Skip businesses with more reviews."
          },
          "requireOwnerEmail": {
            "title": "Only businesses with an owner email",
            "type": "boolean",
            "description": "Keep only businesses where an owner or decision maker was found with a verified or found email.",
            "default": false
          },
          "onlyFitFor": {
            "title": "Only good fits for",
            "type": "array",
            "description": "Keep only businesses that score A or B for at least one of these offers.",
            "items": {
              "type": "string",
              "enum": [
                "reviews",
                "ai_receptionist",
                "missed_call_text_back",
                "lead_follow_up",
                "website",
                "local_seo",
                "chat_widget",
                "booking",
                "email_sms_marketing",
                "social"
              ],
              "enumTitles": [
                "Review management",
                "AI receptionist",
                "Missed-call text-back",
                "Lead follow-up automation",
                "Website design",
                "Local SEO / Google Business Profile",
                "AI chat widget",
                "Online booking",
                "Email and SMS marketing",
                "Social media management"
              ]
            }
          },
          "highlevelToken": {
            "title": "HighLevel Private Integration token",
            "type": "string",
            "description": "Sub-account → Settings → Private Integrations → Create. Scopes: View/Edit Contacts, View/Edit Businesses, View/Edit Custom Fields, View/Edit Objects (the search log), and View/Edit Opportunities if you pick a pipeline. Stored encrypted."
          },
          "highlevelLocationId": {
            "title": "HighLevel sub-account (location) ID",
            "type": "string",
            "description": "Sub-account → Settings → Business Profile, or the ID in the sub-account's URL after /location/."
          },
          "highlevelTags": {
            "title": "Extra tags",
            "type": "array",
            "description": "Added to every contact, next to prospect-buddy, prospect-buddy-<niche>, prospect-buddy-<city>, prospect-buddy-run-<date>, prospect-buddy-fit-a/b/c and prospect-buddy-offer-<best offer>.",
            "items": {
              "type": "string"
            }
          },
          "highlevelPipelineId": {
            "title": "Pipeline ID (optional)",
            "type": "string",
            "description": "Also add each new business as an open opportunity in this pipeline."
          },
          "highlevelStageId": {
            "title": "Pipeline stage ID (optional)",
            "type": "string",
            "description": "Stage for new opportunities; the pipeline's first stage if empty."
          },
          "highlevelCreateFields": {
            "title": "Create missing custom fields",
            "type": "boolean",
            "description": "Creates 16 contact fields in a Prospect Buddy folder if the sub-account doesn't have them: dropdowns (Fit Band, Best Offer, Decision Maker, Email Status, Website Platform, Uses HighLevel), checkboxes (Lead Gaps, Good Fit Offers), numbers (Fit Score, Google Rating, Google Reviews, Days Since Last Review, Owner Reply Rate) and text (Job Title, Gap Details, Google Maps Link), so smart lists and workflows can filter on them.",
            "default": true
          },
          "highlevelLogSearches": {
            "title": "Log each search in HighLevel",
            "type": "boolean",
            "description": "Keeps one record per search term and city (found, owners, owner emails, saved, dataset ID) in a Prospect Buddy custom object, shown as Prospect Buddy in the sub-account's menu. Creates the object if missing and creating fields is on.",
            "default": true
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "Each result is also POSTed here as JSON, e.g. a HighLevel workflow's Inbound Webhook trigger (a premium trigger, about $0.01 a run), Zapier or Make."
          },
          "saveDatasetId": {
            "title": "Save mode: results to save",
            "type": "string",
            "description": "The dataset of an earlier run of this actor. When set, the actor only saves; search and research inputs are ignored."
          },
          "savePlaceIds": {
            "title": "Save mode: place IDs",
            "type": "string",
            "description": "The place_id of each business to save, separated by commas, or \"all\"."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}