{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Outreach Draft Generator — HeyReach Alternative",
    "description": "Generate LinkedIn outreach drafts from a campaign brief and supplied prospects. Export opening messages, follow-ups, and CRM IDs in a manual-review queue. Every draft remains marked for human review and not sent.",
    "version": "0.3",
    "x-build-id": "vzuhy3obx6doRduG8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~heyreach-alternative/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-heyreach-alternative",
        "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/khadinakbar~heyreach-alternative/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-heyreach-alternative",
        "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/khadinakbar~heyreach-alternative/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-heyreach-alternative",
        "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": [
          "campaignName",
          "senderName"
        ],
        "properties": {
          "workflow": {
            "title": "Workflow",
            "enum": [
              "review_known_prospects",
              "enrich_public_profiles",
              "find_public_leads"
            ],
            "type": "string",
            "description": "Choose the bounded job for this run. Use review_known_prospects for CRM records, enrich_public_profiles for public LinkedIn /in/ URLs, or find_public_leads for a public professional search followed by profile enrichment. This does not log in to LinkedIn, send messages, create connections, or operate a campaign.",
            "default": "review_known_prospects"
          },
          "campaignName": {
            "title": "Campaign name",
            "minLength": 1,
            "maxLength": 120,
            "type": "string",
            "description": "A clear internal label for this review batch, for example 'Q4 fintech partner research'. It is copied into every result so CRM and reviewer workflows can trace drafts to their purpose. This is not an external campaign created on LinkedIn or HeyReach."
          },
          "campaignGoal": {
            "title": "Campaign goal",
            "enum": [
              "sales_conversation",
              "partnership",
              "event_follow_up",
              "reengagement"
            ],
            "type": "string",
            "description": "Choose the real job this review batch supports. The goal changes the opening and follow-up framing while preserving the same human-review and no-send boundary.",
            "default": "sales_conversation"
          },
          "senderName": {
            "title": "Sender name",
            "minLength": 1,
            "maxLength": 100,
            "type": "string",
            "description": "The human who will review and, if appropriate, manually send a message, for example 'Khadin Akbar'. It is used only to make the draft read naturally and does not authenticate any account. This is not a LinkedIn login, seat, cookie, or automation credential."
          },
          "senderCompany": {
            "title": "Sender company",
            "maxLength": 120,
            "type": "string",
            "description": "Optional company or team name used to identify the sender naturally in the opening draft. It does not connect or authenticate an account."
          },
          "reviewOwner": {
            "title": "Review owner",
            "maxLength": 100,
            "type": "string",
            "description": "Optional person responsible for checking identity, context, claims, contact basis, opt-outs, timing, and the final manual-use decision. Defaults to the sender name."
          },
          "tone": {
            "title": "Draft tone",
            "enum": [
              "warm_professional",
              "concise",
              "peer_to_peer"
            ],
            "type": "string",
            "description": "Choose a consistent writing style for the review queue. A reviewer must still confirm that each draft sounds natural and appropriate for the relationship.",
            "default": "warm_professional"
          },
          "prospects": {
            "title": "Known B2B prospects",
            "maxItems": 100,
            "type": "array",
            "description": "People already identified by your CRM, account list, or manual research, for example {\"fullName\":\"Ada Lovelace\",\"companyName\":\"Example Ltd\"}. Optional CRM IDs, public LinkedIn URLs, roles, and context are preserved as caller-provided provenance. Set enrichPublicProfiles only when you want a supplied public profile URL enriched. This is not permission to contact anyone automatically.",
            "items": {
              "type": "object",
              "properties": {
                "externalId": {
                  "title": "External ID",
                  "type": "string",
                  "description": "Optional caller-owned CRM or spreadsheet key preserved unchanged, for example crm-001.",
                  "maxLength": 160
                },
                "fullName": {
                  "title": "Full name",
                  "type": "string",
                  "description": "Known professional contact name, for example Ada Lovelace.",
                  "minLength": 1,
                  "maxLength": 120
                },
                "companyName": {
                  "title": "Company name",
                  "type": "string",
                  "description": "Known company context for the draft, for example Example Ltd.",
                  "minLength": 1,
                  "maxLength": 160
                },
                "role": {
                  "title": "Role",
                  "type": "string",
                  "description": "Optional professional role supplied by the caller, for example CTO.",
                  "maxLength": 160
                },
                "linkedInProfileUrl": {
                  "title": "Provided LinkedIn URL",
                  "type": "string",
                  "description": "Optional public LinkedIn /in/ URL already known to the caller, for example https://www.linkedin.com/in/example-person. It is retained as provenance and can be enriched only when enrichPublicProfiles is enabled. This is not a cookie, login, Sales Navigator URL, or permission to contact the person.",
                  "maxLength": 500
                },
                "contextNote": {
                  "title": "Review context",
                  "type": "string",
                  "description": "Optional factual context supplied by the reviewer, for example Met at SaaStr and asked about partner integrations. It must be checked before any manual use.",
                  "maxLength": 500
                }
              },
              "required": [
                "fullName",
                "companyName"
              ]
            }
          },
          "profileUrls": {
            "title": "Public LinkedIn profile URLs",
            "maxItems": 100,
            "type": "array",
            "description": "Public LinkedIn /in/ profile URLs to enrich, for example https://www.linkedin.com/in/example-person. Use this with the enrich_public_profiles workflow; duplicates and invalid URLs are removed before collection. This accepts only public profile URLs, not company pages, Sales Navigator URLs, cookies, or logins. Collected facts remain review-only and are never used to send outreach.",
            "items": {
              "type": "string",
              "maxLength": 500
            }
          },
          "leadSearch": {
            "title": "Public lead-search criteria",
            "type": "object",
            "description": "Criteria for finding public professional profiles before enrichment. Provide a query or job title, such as chief technology officer, and optionally narrow by company or location. Use this only with find_public_leads and keep the request focused; results are capped by maxProspects. This is not a private-contact search, email finder, message sender, or Sales Navigator login.",
            "properties": {
              "query": {
                "title": "Search query",
                "type": "string",
                "description": "Free-text public professional query, for example chief technology officer. It is combined with optional company, jobTitle, and location filters. Leave blank only if jobTitle is provided. This is not a profile URL or private-contact query.",
                "maxLength": 160
              },
              "jobTitle": {
                "title": "Job title",
                "type": "string",
                "description": "Optional public role filter, for example Chief Technology Officer. It narrows the public lead search and does not verify employment. Use query as the broader concept when needed. This is not a request to contact or message matching people.",
                "maxLength": 160
              },
              "company": {
                "title": "Current company",
                "type": "string",
                "description": "Optional company filter, for example Microsoft. It narrows public results and may return no matches if the name is too specific. It does not prove a person works there today. This is not a company-page URL.",
                "maxLength": 160
              },
              "location": {
                "title": "Location",
                "type": "string",
                "description": "Optional public location filter, for example United States or London, UK. It narrows the search and does not verify residency or contactability. Omit it for a broader search. This is not a geographic outreach instruction.",
                "maxLength": 160
              }
            }
          },
          "enrichPublicProfiles": {
            "title": "Enrich supplied public profiles",
            "type": "boolean",
            "description": "When enabled for review_known_prospects, enrich each supplied public LinkedIn /in/ URL before creating its review record. Defaults to false to preserve the existing CRM-only workflow and avoid unnecessary collection. This never uses a LinkedIn login, cookie, email finder, or automation action. Public facts still require human review before any manual use.",
            "default": false
          },
          "valueProposition": {
            "title": "Value proposition",
            "maxLength": 600,
            "type": "string",
            "description": "The truthful reason for reaching out, for example 'We are comparing practical AI visibility workflows for B2B teams'. Defaults to a neutral request for a relevant conversation and must be reviewed for accuracy. This is not generated from profile scraping or an instruction to make unsubstantiated claims.",
            "default": "I would value a short conversation about a relevant workflow."
          },
          "callToAction": {
            "title": "Call to action",
            "maxLength": 300,
            "type": "string",
            "description": "The low-pressure next step placed in the first draft, for example 'Would a 15-minute conversation next week be useful?'. Defaults to a short conversation request. This is a draft phrase only and does not schedule, send, or notify anyone.",
            "default": "Would a 15-minute conversation next week be useful?"
          },
          "followUpCount": {
            "title": "Follow-up drafts",
            "minimum": 0,
            "maximum": 2,
            "type": "integer",
            "description": "How many optional review-only follow-up drafts to include after the opening draft. Defaults to 1 and accepts 0 to 2, with a suggested five-day wait between steps. This does not create a send schedule or automate any LinkedIn action.",
            "default": 1
          },
          "followUpDelayDays": {
            "title": "Suggested follow-up delay",
            "minimum": 1,
            "maximum": 14,
            "type": "integer",
            "description": "Suggested days between review-only steps. Defaults to 5 and accepts 1 to 14. This is planning metadata only; the Actor does not schedule or send anything.",
            "default": 5
          },
          "maxProspects": {
            "title": "Maximum review-ready prospects",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Hard cap on review-ready leads processed in one run. Defaults to 25 and accepts 1 to 25, so callers can bound persisted review-ready record charges and public-data collection. Current event pricing and additional platform usage are shown on the Pricing tab. This does not guarantee a matching public profile or authorize outreach.",
            "default": 25
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}