{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Posting Monitor Clay-Ready Hiring Signal Discovery",
    "description": "Keyword-driven job posting monitor that finds companies hiring for any role across job boards. Returns flat, Clay-ready, firmographic-enriched rows with company LinkedIn URL per posting.",
    "version": "0.0",
    "x-build-id": "BWnYC3fq3NDL3hWH1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mambalabs~gtm-job-discovery/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mambalabs-gtm-job-discovery",
        "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/mambalabs~gtm-job-discovery/runs": {
      "post": {
        "operationId": "runs-sync-mambalabs-gtm-job-discovery",
        "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/mambalabs~gtm-job-discovery/run-sync": {
      "post": {
        "operationId": "run-sync-mambalabs-gtm-job-discovery",
        "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": [
          "keywords"
        ],
        "properties": {
          "keywords": {
            "title": "Role Keywords",
            "type": "array",
            "description": "Editorial / content role titles to search for across job boards.",
            "items": {
              "type": "string"
            },
            "default": [
              "proofreader",
              "copy editor",
              "content editor"
            ]
          },
          "sources": {
            "title": "Job Board Sources",
            "type": "array",
            "description": "Which job boards to search, run as an ordered chain rather than all at once. Tier 0 needs no key and runs every keyword: Jobicy, Remotive, Arbeitnow, The Muse, Remote OK, We Work Remotely and Himalayas. Tier 1 is Adzuna (metered per call, needs an app id and key). Tier 2 runs only on keywords the earlier tiers left short: JobsPipe and TheirStack (metered per job returned) and Google Jobs through SerpAPI (metered per search). A posting that appears on two boards is deduplicated and counted once.",
            "items": {
              "type": "string",
              "enum": [
                "google_jobs",
                "jobicy",
                "remotive",
                "arbeitnow",
                "themuse",
                "remoteok",
                "weworkremotely",
                "himalayas",
                "adzuna",
                "jobspipe",
                "theirstack"
              ],
              "enumTitles": [
                "Google Jobs via SerpAPI (tier 2, needs a SerpAPI key)",
                "Jobicy (tier 0, remote roles)",
                "Remotive (tier 0, remote roles)",
                "Arbeitnow (tier 0)",
                "The Muse (tier 0)",
                "Remote OK (tier 0, remote roles)",
                "We Work Remotely (tier 0, remote roles)",
                "Himalayas (tier 0, remote roles)",
                "Adzuna (tier 1, needs an app id and key)",
                "JobsPipe (tier 2, needs a key)",
                "TheirStack (tier 2, needs a key)"
              ]
            },
            "default": [
              "google_jobs"
            ]
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Geographic filter, e.g. United States, United Kingdom, Canada.",
            "default": "United States"
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Loop these countries inside one run. Overrides Country when set. Metered sources query each country separately; keyless remote boards are global and run once. Use the names Google Jobs accepts: United States, United Kingdom, Canada.",
            "items": {
              "type": "string"
            }
          },
          "lookback_days": {
            "title": "Lookback Days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Only return postings newer than this many days.",
            "default": 30
          },
          "company_size_min": {
            "title": "Minimum Employee Count",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Drop companies with fewer employees than this (only applied when company size is known)."
          },
          "company_size_max": {
            "title": "Maximum Employee Count",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Drop companies larger than this (only applied when company size is known)."
          },
          "exclude_staffing_agencies": {
            "title": "Exclude Staffing Agencies",
            "type": "boolean",
            "description": "Filter out staffing and recruitment agency postings using name and job-description heuristics.",
            "default": true
          },
          "exclude_freelance_marketplaces": {
            "title": "Exclude Freelance Marketplaces",
            "type": "boolean",
            "description": "Filter out postings where the company is a freelance marketplace (Upwork, Fiverr, etc.), which are noise for direct outreach.",
            "default": true
          },
          "freelance_marketplaces": {
            "title": "Freelance Marketplace Names",
            "type": "array",
            "description": "Company names treated as freelance marketplaces and excluded when the toggle above is on. Defaults shown; override or extend as needed.",
            "items": {
              "type": "string"
            },
            "default": [
              "Upwork",
              "Fiverr",
              "Freelancer",
              "Toptal",
              "PeoplePerHour",
              "Guru",
              "99designs"
            ]
          },
          "remote_only": {
            "title": "Remote Only",
            "type": "boolean",
            "description": "Only return remote / work-from-home postings.",
            "default": false
          },
          "previous_run_date": {
            "title": "Previous Run Date",
            "type": "string",
            "description": "Optional ISO date (e.g. 2026-06-01) of your last run. Only postings newer than this are emitted, on top of the built-in cross-run delta cache."
          },
          "max_results": {
            "title": "Max Postings To Scan",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Upper bound on raw postings pulled from the discovery source before filtering. Higher values cost more.",
            "default": 100
          },
          "max_companies": {
            "title": "Max Companies To Enrich",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Cap on unique companies enriched per run (firmographics + LinkedIn). Bounds sub-actor cost.",
            "default": 40
          },
          "serpapi_key": {
            "title": "SerpAPI Key",
            "type": "string",
            "description": "SerpAPI key used for Google Jobs discovery (get a free key at serpapi.com, 250 searches/month, no card). Required to produce results unless a SERPAPI_KEY environment variable is set on the actor."
          },
          "adzuna_app_id": {
            "title": "Adzuna App ID",
            "type": "string",
            "description": "Adzuna application id for the adzuna source. Optional; the ADZUNA_APP_ID environment variable is used when this is empty."
          },
          "adzuna_app_key": {
            "title": "Adzuna App Key",
            "type": "string",
            "description": "Adzuna application key for the adzuna source. Optional; the ADZUNA_APP_KEY environment variable is used when this is empty."
          },
          "jobspipe_key": {
            "title": "JobsPipe API Key",
            "type": "string",
            "description": "JobsPipe Bearer key (jp_live_...) for the jobspipe source. Optional; the JOBSPIPE_KEY environment variable is used when this is empty. JobsPipe bills one credit per job returned."
          },
          "theirstack_key": {
            "title": "TheirStack API Key",
            "type": "string",
            "description": "TheirStack API key (a JWT) for the theirstack source. Optional; the THEIRSTACK_KEY environment variable is used when this is empty. TheirStack bills one credit per job returned."
          },
          "metered_window_days": {
            "title": "Metered Date Window (days)",
            "minimum": 1,
            "maximum": 7,
            "type": "integer",
            "description": "Only ask the metered sources for postings this many days old or newer. JobsPipe and TheirStack bill per job returned, seen before or not, so a narrow window is the biggest credit saver. 1 to 7; a daily sweep wants 2.",
            "default": 2
          },
          "enough_new_companies_per_keyword": {
            "title": "Enough New Companies Per Keyword",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Stop the chain for a keyword once this many distinct new companies have been found for it this run. Later, metered tiers only run on keywords still below this.",
            "default": 3
          },
          "metered_run_cap": {
            "title": "Metered Run Cap",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Ceiling per metered source per country per run (searches for SerpAPI, calls for Adzuna, jobs for JobsPipe and TheirStack) when no quota ledger row decides a smaller one.",
            "default": 50
          },
          "use_gio21": {
            "title": "Use Google Jobs sub-actor fallback",
            "type": "boolean",
            "description": "Best-effort fallback to the gio21 Google Jobs sub-actor when no SerpAPI key is available. Only works on Apify plans that permit running third-party public actors.",
            "default": false
          },
          "qa_test_mode": {
            "title": "QA test mode",
            "type": "boolean",
            "description": "Internal QA fast-path. When true, the actor skips all sub-actor enrichment and emits a single summary row so automated checks complete well within the time budget. Not for normal use.",
            "default": false
          },
          "source_tag": {
            "title": "Source Tag",
            "type": "string",
            "description": "Internal attribution tag set by Mamba Labs on published task examples. Not required, and nothing depends on it. Leave it empty."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}