{
  "openapi": "3.0.1",
  "info": {
    "title": "La Growth Machine Lead Finder & Enrichment",
    "description": "Find people matching your ideal customer profile, enrich them with verified professional emails via the La Growth Machine API, and populate an LGM audience ready for outreach. Also enriches lead lists, existing LGM audiences, or any other Actor’s dataset.",
    "version": "0.1",
    "x-build-id": "5XjMJa3P5ICi8JtMX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sameh.jarour~lgm-lead-enrichment/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sameh.jarour-lgm-lead-enrichment",
        "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/sameh.jarour~lgm-lead-enrichment/runs": {
      "post": {
        "operationId": "runs-sync-sameh.jarour-lgm-lead-enrichment",
        "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/sameh.jarour~lgm-lead-enrichment/run-sync": {
      "post": {
        "operationId": "run-sync-sameh.jarour-lgm-lead-enrichment",
        "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": {
          "lgmApiKey": {
            "title": "La Growth Machine API key",
            "type": "string",
            "description": "Your LGM API key, from https://app.lagrowthmachine.com/settings/api. Stored encrypted. Can also be supplied as the LGM_API_KEY environment variable."
          },
          "leadSource": {
            "title": "How to get the leads",
            "enum": [
              "icpSearch",
              "leadScorer",
              "lgmLinkedinImport",
              "leadList",
              "lgmAudience"
            ],
            "type": "string",
            "description": "Pick how this run should get its leads. Each choice has a matching section below — fill in that one and ignore the rest.",
            "default": "icpSearch"
          },
          "targetAudience": {
            "title": "LGM audience to populate",
            "type": "string",
            "description": "Name of the La Growth Machine audience that the enriched leads should land in. Created automatically if it does not exist. Leave empty to only produce a dataset without touching your LGM account."
          },
          "icpJobTitle": {
            "title": "Job titles",
            "uniqueItems": true,
            "type": "array",
            "description": "The roles you are targeting, one per line, e.g. \"Head of Growth\", \"VP Marketing\", \"Demand Generation Manager\". Each title is searched separately and the results are merged and de-duplicated, so adding titles widens your reach. Note that each title costs its own search on Apify, and the profile budget is split across them.",
            "items": {
              "type": "string"
            }
          },
          "icpLocation": {
            "title": "Location",
            "type": "string",
            "description": "Where they are based, e.g. \"France\" or \"London\". Cookie-free search treats this as a keyword rather than a geo filter — turn on \"Enforce the ICP location\" below to drop off-target people."
          },
          "icpSeniorityLevels": {
            "title": "Seniority levels",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only people at these seniority levels. Leave empty for any seniority.",
            "items": {
              "type": "string",
              "enum": [
                "Intern",
                "Entry",
                "Senior",
                "Manager",
                "Director",
                "VP",
                "CXO",
                "Partner",
                "Owner"
              ]
            }
          },
          "icpJobFunctions": {
            "title": "Job functions",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only people working in these departments. Leave empty for any function.",
            "items": {
              "type": "string",
              "enum": [
                "Sales",
                "Marketing",
                "Engineering",
                "Data",
                "Product",
                "Design",
                "Finance",
                "Human Resources",
                "Operations",
                "Legal",
                "IT",
                "Customer Success",
                "Consulting",
                "Education",
                "Healthcare"
              ]
            }
          },
          "icpCompany": {
            "title": "Company",
            "type": "string",
            "description": "Optional. Company-name keyword, to prospect inside one specific account."
          },
          "icpKeywords": {
            "title": "Extra keywords",
            "type": "string",
            "description": "Optional. Free-text search across role, skills and headline, e.g. \"outbound SaaS\"."
          },
          "maxProfilesToDiscover": {
            "title": "Max profiles to discover",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many people the ICP search looks for. Search wide here: partial LinkedIn profiles and the 'only keep people with a company' filter both drop rows afterwards, so a narrow search often ends with nothing. Each discovered profile costs a small amount of Apify credit; only the ones that survive and get enriched cost LGM credits. With several job titles this budget is split across them.",
            "default": 50
          },
          "requireCompany": {
            "title": "Only keep people with a company",
            "type": "boolean",
            "description": "Recommended. La Growth Machine matches emails on name + company, and every attempt costs credits whether or not it finds anything, so profiles with no company are dropped before enrichment. Ignored when 'What to enrich' is 'No enrichment', since there are no credits to protect there.",
            "default": true
          },
          "strictLocationMatch": {
            "title": "Enforce the ICP location",
            "type": "boolean",
            "description": "Cookie-free search treats location as a keyword, so it can return people outside it (and even people whose surname matches). Turn this on to drop profiles whose location does not contain your ICP location.",
            "default": false
          },
          "linkedinCookie": {
            "title": "LinkedIn session cookie (li_at)",
            "type": "string",
            "description": "Optional. Without it the search runs cookie-free, which is why no LinkedIn login is needed. Supplying your li_at cookie unlocks LinkedIn's exact geo, company and school filters. Stored encrypted."
          },
          "scorerCompanyUrls": {
            "title": "Company websites to score",
            "uniqueItems": true,
            "type": "array",
            "description": "The company websites to evaluate, one per line. Full URLs or bare domains both work.",
            "items": {
              "type": "string"
            }
          },
          "scorerDepartments": {
            "title": "Departments to find contacts in",
            "uniqueItems": true,
            "type": "array",
            "description": "Which teams to hunt for contacts in at the companies that qualify.",
            "items": {
              "type": "string",
              "enum": [
                "c_suite",
                "product",
                "engineering_technical",
                "design",
                "education",
                "finance",
                "human_resources",
                "information_technology",
                "legal",
                "marketing",
                "medical_health",
                "operations",
                "sales",
                "consulting"
              ],
              "enumTitles": [
                "C-Suite",
                "Product",
                "Engineering & Technical",
                "Design",
                "Education",
                "Finance",
                "Human Resources",
                "Information Technology",
                "Legal",
                "Marketing",
                "Medical & Health",
                "Operations",
                "Sales",
                "Consulting"
              ]
            },
            "default": [
              "marketing",
              "sales"
            ]
          },
          "scorerMaxLeadsPerCompany": {
            "title": "Max contacts per company",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Upper bound on contacts discovered at each qualifying company. This multiplies cost — 3 companies x 5 contacts is up to 15 billed leads.",
            "default": 3
          },
          "scorerTechRules": {
            "title": "Score by technology",
            "type": "array",
            "description": "Add points when a company's site uses a given technology. Leave empty to skip tech detection entirely, which is the paid BuiltWith step.",
            "items": {
              "type": "object",
              "properties": {
                "tech": {
                  "title": "Technology",
                  "type": "string",
                  "description": "Technology name, e.g. Shopify, HubSpot, Segment.",
                  "editor": "textfield"
                },
                "weight": {
                  "title": "Points",
                  "type": "integer",
                  "description": "Added to the score when detected. Negative values subtract.",
                  "editor": "number"
                }
              },
              "required": [
                "tech",
                "weight"
              ]
            }
          },
          "scorerContentRules": {
            "title": "Score by homepage content",
            "type": "array",
            "description": "Yes/no questions an LLM answers against each homepage. Points are added when the answer is yes. Leave empty to skip the homepage crawl and the LLM, both paid steps.",
            "items": {
              "type": "object",
              "properties": {
                "question": {
                  "title": "Question",
                  "type": "string",
                  "description": "Phrase it so a plain \"yes\" means the company is a fit.",
                  "editor": "textfield"
                },
                "weight": {
                  "title": "Points",
                  "type": "integer",
                  "description": "Added to the score when the answer is yes. Negative values subtract.",
                  "editor": "number"
                }
              },
              "required": [
                "question",
                "weight"
              ]
            }
          },
          "scorerQualificationThreshold": {
            "title": "Qualification threshold",
            "type": "integer",
            "description": "Companies scoring at or above this get their contacts found and enriched. The rest are dropped. Leave at 0 to accept every company.",
            "default": 0
          },
          "scorerUseEmailFallback": {
            "title": "Retry contacts with no email",
            "type": "boolean",
            "description": "Look up an email for any contact found with a name but no address. Small extra cost per resolved email.",
            "default": false
          },
          "maxScorerSpendUsd": {
            "title": "Max scorer spend (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on what the lead scorer may spend on Apify for tech detection, homepage crawling, the LLM, and contact discovery. 0 or empty = uncapped. Separate from 'Max LGM credits to spend', which caps La Growth Machine enrichment.",
            "default": 0
          },
          "linkedinSearchUrl": {
            "title": "LinkedIn / Sales Navigator / post URL",
            "type": "string",
            "description": "Used with 'Import a LinkedIn search into LGM'. A LinkedIn people-search URL, a Sales Navigator search URL, or a LinkedIn post URL to pull engagers from."
          },
          "lgmIdentityId": {
            "title": "LGM identity ID",
            "type": "string",
            "description": "Which of your connected LinkedIn identities LGM should run the search as. Required for the LinkedIn import. The identity must have LinkedIn connected with the LGM widget open, otherwise LGM answers 404."
          },
          "linkedinPostCategory": {
            "title": "Post engagement type",
            "enum": [
              "like",
              "comment"
            ],
            "type": "string",
            "description": "Only for a LinkedIn post URL: import the people who liked it, or those who commented."
          },
          "autoImport": {
            "title": "Keep the audience in sync",
            "type": "boolean",
            "description": "Ask LGM to keep importing new people who match the search as they appear.",
            "default": false
          },
          "linkedinImportWaitSecs": {
            "title": "How long to wait for the import (seconds)",
            "minimum": 0,
            "maximum": 1800,
            "type": "integer",
            "description": "LGM runs the LinkedIn search asynchronously inside your identity's session, so the audience starts empty. The run waits this long for leads to land before enriching them, and stops early once the count stops growing. 0 = do not wait (the audience is still created and the search still runs in LGM).",
            "default": 300
          },
          "excludeContactedLeads": {
            "title": "Exclude already-contacted leads",
            "type": "boolean",
            "description": "Skip people your LGM campaigns have already reached out to.",
            "default": false
          },
          "leads": {
            "title": "Leads",
            "type": "array",
            "description": "The people to enrich. Each needs a first and last name plus a company name, company website, or LinkedIn URL — or an existing LGM lead ID on its own.",
            "items": {
              "type": "object",
              "properties": {
                "firstname": {
                  "title": "First name",
                  "type": "string",
                  "editor": "textfield",
                  "description": "The lead's first name."
                },
                "lastname": {
                  "title": "Last name",
                  "type": "string",
                  "editor": "textfield",
                  "description": "The lead's last name."
                },
                "companyName": {
                  "title": "Company",
                  "type": "string",
                  "editor": "textfield",
                  "description": "Where they work. La Growth Machine matches emails on name plus company, so this matters."
                },
                "companyUrl": {
                  "title": "Company website",
                  "type": "string",
                  "editor": "textfield",
                  "description": "The company's website, used when no company name is given."
                },
                "linkedinUrl": {
                  "title": "LinkedIn URL",
                  "type": "string",
                  "editor": "textfield",
                  "description": "Their LinkedIn profile URL, which improves the match."
                },
                "leadId": {
                  "title": "LGM lead ID",
                  "type": "string",
                  "description": "Only for leads that already exist in La Growth Machine.",
                  "editor": "textfield"
                }
              }
            }
          },
          "audienceId": {
            "title": "LGM audience ID",
            "type": "string",
            "description": "Used when 'Where the leads come from' is 'LGM audience'. The 24-character audience id, visible in the LGM app URL or via the List Audiences endpoint."
          },
          "enrichType": {
            "title": "What to enrich",
            "enum": [
              "EMAIL_ENRICH",
              "NONE",
              "LINKEDIN_ENRICH",
              "FULL_ENRICH"
            ],
            "type": "string",
            "description": "Email finds a professional email (5 LGM credits, works for people not yet in LGM). No enrichment sources the leads and puts them in your audience without spending any LGM credits — useful for building audiences, or when your plan does not include the enrichment API. LinkedIn refreshes LinkedIn profile fields (1 credit) and Full does both (5 credits); those two only work on leads that already exist in LGM.",
            "default": "EMAIL_ENRICH"
          },
          "skipAlreadyEnriched": {
            "title": "Skip leads that already have an email",
            "type": "boolean",
            "description": "Recommended. Rows that already carry a professional email are passed through untouched instead of spending credits to re-find it.",
            "default": true
          },
          "maxLeads": {
            "title": "Max leads",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on how many leads are enriched and delivered. 0 or empty = no cap. This trims the results after the search; it does not shrink the search itself — use 'Max profiles to discover' for that.",
            "default": 0
          },
          "maxCreditsToSpend": {
            "title": "Max LGM credits to spend",
            "minimum": 0,
            "type": "integer",
            "description": "Safety cap. The run refuses to start if its worst-case credit cost exceeds this. 0 or empty = no cap.",
            "default": 0
          },
          "writeBackToLgm": {
            "title": "Write results back into La Growth Machine",
            "type": "boolean",
            "description": "Push every enriched email and phone number onto the lead in LGM. Defaults to on whenever an audience is named above, so your campaigns pick the leads up.",
            "default": true
          },
          "enrichMode": {
            "title": "Enrichment mode",
            "enum": [
              "polling",
              "sync"
            ],
            "type": "string",
            "description": "La Growth Machine answers most lookups immediately, but some take minutes. 'Polling' uses the immediate answer when there is one and checks back otherwise — the right default. 'Sync' only ever takes the first answer, so slow lookups come back empty. Leads still being worked on when the run ends are marked 'pending', not failed, and their request ids are saved so you can collect them without paying again.",
            "default": "polling"
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many leads to enrich in parallel. The Actor rate-limits itself to stay inside LGM's 50-calls-per-10-seconds budget regardless of this value.",
            "default": 5
          },
          "pollIntervalSecs": {
            "title": "Poll interval (seconds)",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "How often to check a pending enrichment in polling mode.",
            "default": 5
          },
          "pollTimeoutSecs": {
            "title": "Poll timeout (seconds)",
            "minimum": 10,
            "maximum": 900,
            "type": "integer",
            "description": "How long to wait for one slow lead before marking it 'pending'. LGM does finish most lookups instantly, but a minority stay pending for many minutes. Raising this makes runs slower; pending leads keep their request id either way, so nothing is lost.",
            "default": 180
          },
          "maxCallsPerWindow": {
            "title": "Max LGM calls per 10 seconds",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Self-imposed rate limit. LGM rejects anything above 50 per 10 seconds per key; leave headroom if other tools share this key.",
            "default": 40
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}