{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Posts to B2B Buying Signals",
    "description": "Run selected upstream job Actors or process existing job data, then turn job posts into evidence-backed B2B buying-signal accounts with cost caps, scores, personas, and outreach angles.",
    "version": "0.1",
    "x-build-id": "kDRNRulKrBy6NagsN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/signalflow_studio~job-posts-to-buying-signals/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-signalflow_studio-job-posts-to-buying-signals",
        "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/signalflow_studio~job-posts-to-buying-signals/runs": {
      "post": {
        "operationId": "runs-sync-signalflow_studio-job-posts-to-buying-signals",
        "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/signalflow_studio~job-posts-to-buying-signals/run-sync": {
      "post": {
        "operationId": "run-sync-signalflow_studio-job-posts-to-buying-signals",
        "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": {
          "sourceMode": {
            "title": "Source mode",
            "enum": [
              "uploaded_job_rows",
              "dataset",
              "upstream_actor"
            ],
            "type": "string",
            "description": "Default: run upstream job Actor(s), then convert the job posts into qualified account signals. Use uploaded rows or dataset mode only when you already have job data.",
            "default": "upstream_actor"
          },
          "jobSearchKeyword": {
            "title": "Job search keyword",
            "type": "string",
            "description": "Main role, skill, or tool keyword to search for in upstream job sources.",
            "default": "RevOps Manager"
          },
          "jobSearchLocation": {
            "title": "Job search location",
            "type": "string",
            "description": "Location passed to upstream job sources that support location search.",
            "default": "United States"
          },
          "maxJobsPerSource": {
            "title": "Max jobs per source",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Limit passed to each simple upstream Actor using that Actor's expected input field: LinkedIn count, Indeed maxRows, ATS APIs limit. LinkedIn has a minimum count of 10; Greenhouse/Lever/Ashby APIs have a minimum limit of 200, so values below those minimums are raised for that source. Check each upstream Actor's Input and Pricing tabs.",
            "default": 50
          },
          "maxUpstreamChargeUsdPerSource": {
            "title": "Max upstream charge per source",
            "minimum": 0.1,
            "maximum": 100,
            "type": "number",
            "description": "Maximum Apify charge allowed for each upstream Actor run, passed as maxTotalChargeUsd to Apify's run-sync-get-dataset-items API. This Actor also passes maxItems to cap paid result count for PPR upstream Actors when supported. Default USD 1.00 per enabled upstream source. Increase only after checking the upstream Actor's Pricing tab. Official run limit docs: https://docs.apify.com/api/v2/act-run-sync-get-dataset-items-post",
            "default": 1
          },
          "useLinkedInJobs": {
            "title": "Use LinkedIn Jobs - $1.00 / 1K results",
            "type": "boolean",
            "description": "Upstream Actor: https://apify.com/curious_coder/linkedin-jobs-scraper. Price snapshot checked 2026-05-27: $1.00 / 1,000 results. Simple mode sends urls=[generated LinkedIn job search URL], count=maxJobsPerSource minimum 10, scrapeCompany=true. Check the Actor's Pricing tab before running.",
            "default": true
          },
          "useIndeedJobs": {
            "title": "Use Indeed Jobs - $5.00 / 1K jobs",
            "type": "boolean",
            "description": "Upstream Actor: https://apify.com/borderline/indeed-scraper. Price snapshot checked 2026-05-27: $5.00 / 1,000 jobs. Simple mode sends query, location, and maxRows=maxJobsPerSource. Enabling more sources increases possible upstream charges and this Actor's upstream_actor_called/job_normalized events.",
            "default": false
          },
          "useGreenhouseJobs": {
            "title": "Use Greenhouse Jobs API - from $1.20 / 1K jobs",
            "type": "boolean",
            "description": "Upstream Actor: https://apify.com/fantastic-jobs/greenhouse-jobs-api. Price snapshot checked 2026-05-27: from $1.20 / 1,000 jobs. Simple mode sends titleSearch, locationSearch, limit=maxJobsPerSource minimum 200, includeAi=false, includeLinkedIn=true.",
            "default": false
          },
          "useLeverJobs": {
            "title": "Use Lever Jobs API - from $0.80 / 1K jobs",
            "type": "boolean",
            "description": "Upstream Actor: https://apify.com/fantastic-jobs/lever-co-jobs-api. Price snapshot checked 2026-05-27: from $0.80 / 1,000 jobs. Simple mode sends titleSearch, locationSearch, limit=maxJobsPerSource minimum 200, includeAi=false, includeLinkedIn=true.",
            "default": false
          },
          "useAshbyJobs": {
            "title": "Use Ashby Jobs API - from $1.20 / 1K jobs",
            "type": "boolean",
            "description": "Upstream Actor: https://apify.com/fantastic-jobs/ashby-jobs-api. Price snapshot checked 2026-05-27: from $1.20 / 1,000 jobs. Simple mode sends titleSearch, locationSearch, limit=maxJobsPerSource minimum 200, includeAi=false, includeLinkedIn=true.",
            "default": false
          },
          "upstreamActors": {
            "title": "Advanced upstream Actors",
            "type": "array",
            "description": "Optional advanced override. Leave empty to use the simple source toggles above. Add multiple items here when you need custom Actor IDs or source-specific inputs. Built-in preset price snapshots checked 2026-05-27: linkedin_jobs_popular $1.00/1K results, indeed_jobs_popular $5.00/1K jobs, greenhouse_jobs_api from $1.20/1K jobs, lever_jobs_api from $0.80/1K jobs, ashby_jobs_api from $1.20/1K jobs. Each enabled item may start one upstream Actor run and can create separate upstream Actor charges for the run user."
          },
          "simulateUpstreamRun": {
            "title": "Simulate upstream run",
            "type": "boolean",
            "description": "Use mockUpstreamItems from each upstreamActors item instead of calling upstream Actors. Intended for testing adapters without generating upstream Actor charges. Leave false for normal use.",
            "default": false
          },
          "sourceDatasetId": {
            "title": "Source dataset ID",
            "type": "string",
            "description": "Existing Apify dataset ID to process when sourceMode is dataset."
          },
          "jobRows": {
            "title": "Uploaded job rows",
            "type": "array",
            "description": "Direct job rows to process. Supports common fields such as companyName, company, domain, jobTitle, title, description, url, jobUrl, location, postedAt, and source."
          },
          "playbook": {
            "title": "Intent playbook",
            "enum": [
              "crm_revops",
              "data_stack",
              "cybersecurity",
              "custom"
            ],
            "type": "string",
            "description": "The buying-need pattern to detect from job posts.",
            "default": "crm_revops"
          },
          "jobKeywords": {
            "title": "Job keywords",
            "type": "array",
            "description": "Custom job title, skill, and tool keywords. These supplement the selected playbook.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Optional location keywords. Leave empty to match all locations.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Prefer jobs posted within this many days. Rows without postedAt are still considered with lower recency confidence.",
            "default": 30
          },
          "minSignalScore": {
            "title": "Minimum signal score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only accounts at or above this score are emitted to the main dataset.",
            "default": 70
          },
          "maxJobsToProcess": {
            "title": "Max jobs to process",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum normalized job rows this Actor analyzes after upstream data is returned. This controls this Actor's job_normalized PPE events, but does not replace upstream Actor pricing limits.",
            "default": 100
          },
          "maxResults": {
            "title": "Max qualified accounts",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum qualified accounts to output. This controls this Actor's qualified_account PPE events.",
            "default": 25
          },
          "excludeStaffingAgencies": {
            "title": "Exclude staffing agencies",
            "type": "boolean",
            "description": "Penalize likely recruiters, staffing firms, and job boards so output focuses on buying accounts.",
            "default": true
          },
          "enableAiInsights": {
            "title": "Generate AI-assisted insights",
            "type": "boolean",
            "description": "Generate concise inferred need, why-now, recommended persona, and outreach angle for qualified accounts. AI is BYOK only: if no AI key is supplied, deterministic insight text is used and no external AI provider is called.",
            "default": false
          },
          "aiProvider": {
            "title": "AI provider",
            "enum": [
              "deepseek",
              "openrouter",
              "openai"
            ],
            "type": "string",
            "description": "AI provider used when an API key is supplied.",
            "default": "deepseek"
          },
          "aiProviderApiKey": {
            "title": "AI provider API key",
            "type": "string",
            "description": "Optional BYOK key for AI-assisted insight generation. Leave empty to use deterministic insights without external AI calls."
          },
          "aiModel": {
            "title": "AI model",
            "type": "string",
            "description": "Optional model override. Defaults: deepseek-chat, openai/gpt-4.1-mini on OpenRouter, or gpt-4.1-mini on OpenAI."
          },
          "maxAiInsights": {
            "title": "Max AI insights",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum qualified accounts that receive AI-assisted insights.",
            "default": 100
          },
          "debug": {
            "title": "Debug logs",
            "type": "boolean",
            "description": "Include more progress details in logs and OUTPUT.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}