{
  "openapi": "3.0.1",
  "info": {
    "title": "Computrabajo Scraper — LatAm Job Listings",
    "description": "Scrape Computrabajo job listings across 18 Latin American country portals. Every row carries the full description plus salary normalised to the local currency and pay period. Run it in delta mode to return only new and changed jobs on later runs.",
    "version": "0.1",
    "x-build-id": "eQaPzXLCv6M3f0nht"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blackfalcondata~computrabajo-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blackfalcondata-computrabajo-scraper",
        "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/blackfalcondata~computrabajo-scraper/runs": {
      "post": {
        "operationId": "runs-sync-blackfalcondata-computrabajo-scraper",
        "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/blackfalcondata~computrabajo-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-blackfalcondata-computrabajo-scraper",
        "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": {
          "query": {
            "title": "🔍 Search Term(s)",
            "type": "string",
            "description": "Job keywords to search, e.g. `ventas`, `atención a cliente`, `chofer`, `contador`. Leave empty and set a Location to browse every job in that place."
          },
          "startUrls": {
            "title": "🔗 Start URLs",
            "type": "array",
            "description": "Paste Computrabajo search pages, company boards or category pages, e.g. `https://mx.computrabajo.com/trabajo-de-ventas`. Each URL is followed through its own pages, and results from all URLs are merged and de-duplicated. Any filters already in the URL are kept. When you supply URLs here they replace the Search Term and Location fields. Direct links to a single job are not search pages and are skipped.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "jobUrls": {
            "title": "🎯 Job URLs",
            "type": "array",
            "description": "Paste links to individual Computrabajo job pages, e.g. `https://mx.computrabajo.com/ofertas-de-trabajo/oferta-de-trabajo-de-...`. Each one is fetched directly with no search. Use this when you already know the jobs you want; use Start URLs for a whole results page.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "country": {
            "title": "🌍 Country",
            "enum": [
              "mx",
              "ar",
              "co",
              "cl",
              "pe",
              "ec",
              "cr",
              "pa",
              "gt",
              "hn",
              "ni",
              "sv",
              "do",
              "bo",
              "py",
              "uy",
              "ve",
              "pr"
            ],
            "type": "string",
            "description": "Which Computrabajo country portal to search.",
            "default": "mx"
          },
          "countries": {
            "title": "🌎 Extra countries",
            "type": "array",
            "description": "Search several Computrabajo portals in one run. Leave empty to use just the single Country above. Results from every portal are merged and de-duplicated, and each job keeps its own country and local currency.",
            "items": {
              "type": "string",
              "enum": [
                "mx",
                "ar",
                "co",
                "cl",
                "pe",
                "ec",
                "cr",
                "pa",
                "gt",
                "hn",
                "ni",
                "sv",
                "do",
                "bo",
                "py",
                "uy",
                "ve",
                "pr"
              ],
              "enumTitles": [
                "Mexico",
                "Argentina",
                "Colombia",
                "Chile",
                "Peru",
                "Ecuador",
                "Costa Rica",
                "Panama",
                "Guatemala",
                "Honduras",
                "Nicaragua",
                "El Salvador",
                "Dominican Republic",
                "Bolivia",
                "Paraguay",
                "Uruguay",
                "Venezuela",
                "Puerto Rico"
              ]
            },
            "default": []
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "City, state or region to narrow the search, e.g. `Guadalajara`, `Bogotá`, `Buenos Aires`. Leave empty to search the whole country."
          },
          "maxDaysOld": {
            "title": "🗓️ Only jobs posted in the last N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Limit results to jobs published within this many days, e.g. `1` for today, `7` for the past week. Leave empty for all jobs regardless of age."
          },
          "salaryBand": {
            "title": "💰 Minimum salary",
            "enum": [
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "8",
              "9",
              "10"
            ],
            "type": "string",
            "description": "Only jobs whose advertised salary is in this band, using Computrabajo's own salary filter. Leave empty for any salary. Jobs that do not state a salary are excluded by the site when this is set."
          },
          "sortBy": {
            "title": "↕️ Sort results by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "How Computrabajo orders the results before they are collected. `Newest first` matters most when you cap the number of results — it decides which jobs you get, not just their order.",
            "default": "relevance"
          },
          "autoPartition": {
            "title": "🧩 Reach past the site's result limit",
            "type": "boolean",
            "description": "Computrabajo stops paging a search after about 9,980 results, so a broad search cannot return everything however high you set the max. Turn this on and a search that hits the limit is automatically split by region and each region collected separately, then merged and de-duplicated, which reaches jobs a single search cannot. Off by default.",
            "default": false
          },
          "maxResults": {
            "title": "💯 Max Results",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum rows for the whole run. Computrabajo stops paging a single search at about 9,980 results — to go past that, narrow the search (add a location or a recency window), search several countries, or turn on \"Reach past the site's result limit\". Runs above ~10,000 rows may need the run timeout raised.",
            "default": 25
          },
          "includeDetails": {
            "title": "📋 Include Full Details",
            "type": "boolean",
            "description": "Fetch each job's own page for the full description, contract type, work schedule, work mode and the requirements (education, experience, age, licences, travel). This is most of what a run costs — about 12x the data of the results pages alone — so turn it off for a fast, cheap listing of title, company, location, salary and posted date.",
            "default": true
          },
          "includeCompanyDetails": {
            "title": "🏢 Add employer profile",
            "type": "boolean",
            "description": "Also fetch each employer's Computrabajo profile: rating, verified badge, follower count, number of open jobs, and how many reviews, salary reports and interview reports they have, plus the company description. Each employer is fetched once per run no matter how many of their jobs you collect, so this adds far fewer requests than it looks. Off by default.",
            "default": false
          },
          "descriptionMaxLength": {
            "title": "✂️ Description Max Length",
            "minimum": 0,
            "type": "integer",
            "description": "Truncate description to N chars. 0 = no truncation.",
            "default": 0
          },
          "compact": {
            "title": "📦 Compact Output",
            "type": "boolean",
            "description": "Core fields only (for AI-agent/MCP workflows).",
            "default": false
          },
          "descriptionFormat": {
            "title": "📝 Description Format",
            "enum": [
              "all",
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "Which description representations to emit. `all` keeps description + descriptionText + descriptionHtml + descriptionMarkdown (default, back-compat). `text` / `html` / `markdown` keep only one variant — typically halves output size.",
            "default": "all"
          },
          "excludeEmptyFields": {
            "title": "🧹 Exclude Empty Fields",
            "type": "boolean",
            "description": "Drop null / empty-string / empty-array fields (and fully-null nested objects like socialProfiles) from each output record. Off by default to preserve dataset schema compatibility; turn on to slim output for LLM / agent consumption.",
            "default": false
          },
          "incrementalMode": {
            "title": "♻️ Incremental Mode",
            "type": "boolean",
            "description": "Only return jobs that are new or changed since your last run with the same search settings. The first run returns everything and remembers it; later runs skip what has not changed, so you pay for far fewer rows.",
            "default": false
          },
          "stateKey": {
            "title": "🔑 State Key",
            "type": "string",
            "description": "Optional. Stable identifier for the tracked search universe. Leave empty to auto-generate from search inputs."
          },
          "emitUnchanged": {
            "title": "♻️ Emit Unchanged",
            "type": "boolean",
            "description": "Also emit jobs that have not changed since the last run (incrementalMode only).",
            "default": false
          },
          "emitExpired": {
            "title": "⚰️ Emit Expired",
            "type": "boolean",
            "description": "Also emit jobs that have disappeared since the last run (incrementalMode only).",
            "default": false
          },
          "skipReposts": {
            "title": "🚫 Skip Reposts",
            "type": "boolean",
            "description": "When incremental, skip jobs whose content matches an expired job from a prior run (cross-run repost detection).",
            "default": false
          },
          "telegramToken": {
            "title": "🔑 Telegram Bot Token",
            "type": "string",
            "description": "Telegram bot token (from @BotFather). Required for Telegram notifications."
          },
          "telegramChatId": {
            "title": "💬 Telegram Chat ID",
            "type": "string",
            "description": "Telegram chat or channel ID (e.g. \"-100123456789\"). Required when telegramToken is set."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord Webhook URL",
            "type": "string",
            "description": "Discord incoming webhook URL. Server Settings → Integrations → Webhooks → New Webhook."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack Webhook URL",
            "type": "string",
            "description": "Slack incoming webhook URL. api.slack.com/messaging/webhooks."
          },
          "notificationLimit": {
            "title": "📊 Max Jobs Per Notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of jobs included in each notification message (1–20).",
            "default": 5
          },
          "notifyOnlyChanges": {
            "title": "🔄 Notify Only New/Updated",
            "type": "boolean",
            "description": "When Incremental Mode is on, only send notifications for NEW and UPDATED jobs. Has no effect outside incremental mode.",
            "default": false
          },
          "whatsappAccessToken": {
            "title": "📱 WhatsApp Access Token",
            "type": "string",
            "description": "WhatsApp Cloud API permanent access token (System User token from Meta Business). Recipient must have messaged the business number within the last 24h (service-conversation window — free since Nov 2024)."
          },
          "whatsappPhoneNumberId": {
            "title": "📞 WhatsApp Phone Number ID",
            "type": "string",
            "description": "Your WhatsApp Business phone-number ID (numeric, from Meta dashboard). Required when whatsappAccessToken is set."
          },
          "whatsappTo": {
            "title": "📲 WhatsApp Recipient",
            "type": "string",
            "description": "Recipient phone in E.164 format without + (e.g. \"436641234567\"). Recipient must have messaged your business number within last 24h."
          },
          "webhookUrl": {
            "title": "🪝 Generic Webhook URL",
            "type": "string",
            "description": "Receives a JSON POST with {metadata, items} after each run. Universal escape hatch for n8n / Make / Zapier / custom backends."
          },
          "webhookHeaders": {
            "title": "📋 Webhook Headers",
            "type": "object",
            "description": "Optional JSON object of custom headers (e.g. {\"Authorization\":\"Bearer ...\"})."
          },
          "appConnector": {
            "title": "Send results to a connected app",
            "type": "string",
            "description": "Optional. Pick a connected app under Settings → API & Integrations to receive your results (including any contact details). Best-effort across MCP connectors as Apify expands its catalog."
          },
          "mcpIssueTeam": {
            "title": "Issue tracker team",
            "type": "string",
            "description": "Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}