{
  "openapi": "3.0.1",
  "info": {
    "title": "Ireland Jobs Scraper: jobs.ie & IrishJobs.ie Combined + Salary",
    "description": "Combines jobs.ie and IrishJobs.ie, Ireland's two leading job boards, into one structured feed per run: full salary, employer, and location data. Includes a bonus Employers hiring-signal dataset for B2B prospecting, plus 5-state monitor mode. Pulls into n8n, Zapier, or Clay via API. $0.003/job.",
    "version": "0.1",
    "x-build-id": "DCKwhYU1K5j76BHwS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~ireland-jobs-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-ireland-jobs-feed",
        "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/getascraper~ireland-jobs-feed/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-ireland-jobs-feed",
        "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/getascraper~ireland-jobs-feed/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-ireland-jobs-feed",
        "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": {
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Category URL slugs to search, taken from either site's /jobs/<slug> path. Verified identical on both sites: it, sales, healthcare, accountancy, hr - other slugs from either site's own category pages also work. One category keeps the mandatory default run fast; add more to widen the search.",
            "items": {
              "type": "string"
            },
            "default": [
              "it"
            ]
          },
          "jobType": {
            "title": "Job Type",
            "enum": [
              "any",
              "permanent",
              "part-time",
              "contract",
              "temporary",
              "work-from-home"
            ],
            "type": "string",
            "description": "Restrict to one employment type. Changes the site's own listing URL (e.g. /jobs/permanent/it) so it narrows results at the source, not after the fact.",
            "default": "any"
          },
          "companyType": {
            "title": "Company Type",
            "enum": [
              "any",
              "direct-employer",
              "agency"
            ],
            "type": "string",
            "description": "Restrict to roles posted directly by the employer, or only by recruitment agencies. Single-select: both sites' own facet filter does not reliably support selecting both types at once (confirmed live - it silently falls back to unfiltered).",
            "default": "any"
          },
          "postedWithinDays": {
            "title": "Posted Within (Days)",
            "minimum": 1,
            "maximum": 14,
            "type": "integer",
            "description": "Only show jobs posted in the last N days. Must be exactly 1, 3, 7, or 14 - the site's own real facet options; any other value is ignored (no date filter applied). Leave blank for no date limit."
          },
          "salaryPeriod": {
            "title": "Minimum Salary Period",
            "enum": [
              "",
              "annual",
              "daily",
              "hourly"
            ],
            "type": "string",
            "description": "Which pay period the Minimum Salary Amount below is measured in. Leave as \"No minimum\" to skip salary filtering entirely - both sites only expose these three periods (no weekly or monthly option exists on either platform).",
            "default": ""
          },
          "salaryMin": {
            "title": "Minimum Salary Amount",
            "minimum": 0,
            "type": "integer",
            "description": "Only show jobs paying at least this much, in euro, measured in the period chosen above (e.g. 45000 with Annual salary = €45,000+ per year). Ignored unless Minimum Salary Period is also set."
          },
          "maxItemsPerSource": {
            "title": "Max Items Per Source",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum jobs to fetch from EACH source site per category (so up to 2x this many raw jobs before dedup). Kept at 10-15 by default: this Actor always fetches both sites at once and then runs cross-source matching on top, which adds real processing time beyond what a single-site scraper's equivalent limit would take.",
            "default": 12
          },
          "includeDescription": {
            "title": "Include Full Description",
            "type": "boolean",
            "description": "Include the full job description text. Unlike a typical enrichment toggle this adds no extra request: every job already needs its detail page fetched for structured salary, employer, and location data, so the description comes along for free. Turn off only to shrink the dataset size.",
            "default": true
          },
          "monitorMode": {
            "title": "Monitor Mode",
            "enum": [
              "snapshot",
              "changes"
            ],
            "type": "string",
            "description": "\"Snapshot\" outputs the current deduplicated feed with no history. \"Changes\" computes NEW / UPDATED / REAPPEARED / UNCHANGED / EXPIRED status against the previous run of the same category set, over the ALREADY-DEDUPLICATED feed - so a job already seen on jobs.ie that simply also turns up on IrishJobs.ie this run is correctly left UNCHANGED, not wrongly flagged NEW the way a single-site monitor pointed at either board alone would.",
            "default": "snapshot"
          },
          "includeUnchanged": {
            "title": "Include Unchanged Jobs",
            "type": "boolean",
            "description": "Only applies when Monitor Mode is \"Changes\". Off by default so the dataset stays focused on what actually moved (NEW/UPDATED/REAPPEARED/EXPIRED); turn on to also emit every UNCHANGED job on every run.",
            "default": false
          },
          "stateName": {
            "title": "Monitor State Name",
            "type": "string",
            "description": "Optional label that keeps this run's Monitor Mode history separate from another schedule using different categories. Leave blank unless you run this Actor on multiple schedules with different category sets and want each to track its own NEW/UPDATED/EXPIRED history independently.",
            "default": ""
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Residential proxy in Ireland is required: jobs.ie and IrishJobs.ie both return an Akamai edge-ACL \"Access Denied\" page to datacenter-proxy and unproxied requests on listing and detail pages (confirmed live during this build), so switching this to datacenter will silently return zero jobs.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "IE"
            }
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum parallel requests across both sites. Lower this if the run log shows retries or blocked attempts; raise it to finish larger custom runs faster.",
            "default": 5
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failed page request, listing or detail, before giving up on it.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}