{
  "openapi": "3.0.1",
  "info": {
    "title": "IrishJobs.ie Scraper — Jobs, Salaries & Employer Leads",
    "description": "Scrape IrishJobs.ie, Ireland's national job board: title, company, location, salary, exact posted date, employment type, industry, GPS coordinates and the full description. Filter by county, recency, direct-employer-only and salary. No login, no cookies.",
    "version": "0.1",
    "x-build-id": "Sz6K7bs5Z1NpISxVs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~irishjobs-ie-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-irishjobs-ie-jobs-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/scrapersdelight~irishjobs-ie-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-irishjobs-ie-jobs-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/scrapersdelight~irishjobs-ie-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-irishjobs-ie-jobs-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": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords to search, one per line (e.g. \"accountant\", \"software engineer\"). Each term becomes /jobs/<term>. Leave empty to sweep the WHOLE live board via /jobs/all (9,869 live postings measured 2026-09-04).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Irish locations, one per line — city, county or province (e.g. \"dublin\", \"county-cork\", \"munster\", \"northern-ireland\"). Combined with every search term as /jobs/<term>/in-<location>. Leave empty for the whole country.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Paste any irishjobs.ie search URL straight from your browser — facets and filters already applied are preserved. A /job/... detail URL is also accepted and scraped as a single posting.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "any",
              "permanent",
              "work-from-home",
              "contract",
              "part-time",
              "temporary"
            ],
            "type": "string",
            "description": "Contract type, applied as a path segment (the site's own facet).",
            "default": "any"
          },
          "postedWithin": {
            "title": "Posted within (days)",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14"
            ],
            "type": "string",
            "description": "Only postings published in the last N days. This is the highest-value filter for a recruitment or staffing buyer — the weekly \"who just started hiring\" delta. Measured board-wide 2026-09-04: 2,809 new in 24h, 6,087 in 3 days, 8,200 in 7 days, 9,620 in 14 days.",
            "default": "any"
          },
          "companyTypes": {
            "title": "Advertiser type",
            "enum": [
              "any",
              "directEmployer",
              "agency"
            ],
            "type": "string",
            "description": "Direct employers only is the highest-value slice for an agency BD team; agencies only is the competitor-monitoring slice. Measured board-wide: 6,308 direct employer vs 3,561 agency postings.",
            "default": "any"
          },
          "excludeAgencies": {
            "title": "Exclude recruitment agencies",
            "type": "boolean",
            "description": "Shorthand for Advertiser type = Direct employers only.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only postings advertising at least this much (0 = no filter). Note that only ~29% of IrishJobs postings state a number at all — this filter drops the \"Not Disclosed\" majority.",
            "default": 0
          },
          "salaryPeriod": {
            "title": "Salary period",
            "enum": [
              "annual",
              "daily",
              "hourly"
            ],
            "type": "string",
            "description": "Which salary scale the minimum applies to.",
            "default": "annual"
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "relevance",
              "date",
              "salaryHigh",
              "salaryLow"
            ],
            "type": "string",
            "description": "The site's own sort. In Full coverage mode all four sorts are crawled and unioned regardless of this setting.",
            "default": "relevance"
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on the number of jobs returned AND charged. 0 = as many as the crawl plan can reach.",
            "default": 50
          },
          "maxPagesPerQuery": {
            "title": "Max pages per query",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Pages of 25 to walk per search. HARD-CAPPED AT 4: irishjobs.ie resets the connection on ?page=5 and beyond, so one search reaches 100 rows. Use Full coverage mode to go past that.",
            "default": 4
          },
          "fullCoverageMode": {
            "title": "Full coverage mode",
            "type": "boolean",
            "description": "When a search has more results than the 100-row window can reach, automatically split it using the site's OWN facet counts (location, then recency, then job type, then salary band) and union the slices. This is the difference between \"the first 100\" and \"the whole board\". Costs more requests.",
            "default": false
          },
          "includeRelatedJobs": {
            "title": "Include related / padded jobs",
            "type": "boolean",
            "description": "IrishJobs pads narrow searches with 'semantic' and 'regional' cards you did not ask for (measured: /jobs/sales-manager/in-galway reports 12 results and renders 3 real + 9 padded). They are dropped and NOT charged by default. Turn on to keep them — every row is tagged with its `section`.",
            "default": false
          },
          "scrapeJobDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Fetch each posting's own page for the full description, employment type, industry, expiry date, GPS coordinates, structured address, apply type and the remote-work flag. One extra request per job — billed as a separate event.",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "both",
              "text",
              "html"
            ],
            "type": "string",
            "description": "The source description is HTML. Choose plain text, HTML, or both.",
            "default": "both"
          },
          "dedupeByEmployer": {
            "title": "One row per employer",
            "type": "boolean",
            "description": "Collapse to a single row per hiring company (measured: 130 employers behind 226 unique jobs — a ~43% collapse). Use this when you want the employer list, not the job list.",
            "default": false
          },
          "onlyNewSince": {
            "title": "Only jobs posted since",
            "type": "string",
            "description": "An ISO date (2026-09-01) or the word lastRun. With lastRun the actor remembers the newest posting date per search scope in a named key-value store, so a scheduled run returns only what is genuinely new. Posted dates are exact ISO timestamps from the source, so this is reliable.",
            "default": ""
          },
          "employerNameFilter": {
            "title": "Only these employers",
            "type": "array",
            "description": "Case-insensitive substring match on the company name. One per line.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeEmployers": {
            "title": "Exclude these employers",
            "type": "array",
            "description": "Case-insensitive substring match on the company name. One per line.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleMustInclude": {
            "title": "Job title must include",
            "type": "array",
            "description": "Keep a row only if its title contains one of these (case-insensitive). One per line.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleMustExclude": {
            "title": "Job title must not include",
            "type": "array",
            "description": "Drop a row if its title contains any of these (case-insensitive). One per line.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "outputFields": {
            "title": "Output fields",
            "type": "array",
            "description": "Keep only these columns, in this order (e.g. title, company, location, job_url). Leave empty for the full row. CSV width matters when you hand this to a sales team.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "flattenOutput": {
            "title": "Flatten output",
            "type": "boolean",
            "description": "Flatten nested objects and join arrays into single cells — friendlier for CSV, Excel and Google Sheets exports.",
            "default": false
          },
          "includeRawJson": {
            "title": "Include raw source JSON",
            "type": "boolean",
            "description": "Attach the untouched listing record and JobPosting JSON-LD under `raw`. Useful for debugging or for fields we do not surface.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "MEASURED AS REQUIRED: irishjobs.ie serves a 389-byte Akamai 403 to Apify's datacenter and shared pools. An Irish residential exit returns real data. Change the country only if you know what you are doing — an IE exit is what makes the results locale-correct.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "IE"
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Parallel requests. Keep it low — the site is Akamai-fronted and punishes bursts.",
            "default": 4
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Retries per request with a fresh proxy session. NGHTTP2_INTERNAL_ERROR is transient on this host and clears on one retry.",
            "default": 3
          },
          "diagnose": {
            "title": "Diagnostic mode",
            "type": "boolean",
            "description": "Fetch one search page and one job page, dump both to the key-value store, log the parsed shape and exit without charging.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}