{
  "data": {
    "id": "rh3yK2XvhPq0FCUT8",
    "actId": "PZaEPJPMb3jko1X4z",
    "userId": "tnBVjt3CXmcUrEE3L",
    "startedAt": "2026-10-31T14:36:13.980Z",
    "finishedAt": "2026-10-31T14:36:18.851Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 4784,
      "runTimeSecs": 4.784,
      "computeUnits": 0.005315555555555555,
      "imageSizeBytes": 332750336
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "F2Aeb3gE2syjqz9xC",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Freelancermap Scraper Input\",\n  \"description\": \"Search freelance IT projects or freelancer profiles on freelancermap.com by keyword, category, country, city, contract and workplace filters, or fetch full detail by URL.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to fetch.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"projectSearch\",\n        \"freelancerSearch\",\n        \"projectDetail\",\n        \"freelancerProfile\"\n      ],\n      \"enumTitles\": [\n        \"Search freelance projects\",\n        \"Search freelancer profiles\",\n        \"Fetch project details by URL/slug\",\n        \"Fetch freelancer profiles by URL/slug\"\n      ],\n      \"default\": \"projectSearch\",\n      \"prefill\": \"projectSearch\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries\",\n      \"type\": \"array\",\n      \"description\": \"One or more keywords, job titles or technologies. Each query is searched separately and its results are merged (mode=projectSearch/freelancerSearch).\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": [\n        \"python\"\n      ]\n    },\n    \"startUrls\": {\n      \"title\": \"Search or detail URLs\",\n      \"type\": \"array\",\n      \"description\": \"Optional freelancermap search URLs (filters in the URL are copied) or direct project/profile URLs, as {\\\"url\\\": \\\"...\\\"} entries. Direct detail URLs are emitted as detail records (mode=projectSearch/freelancerSearch).\",\n      \"editor\": \"requestListSources\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"category\": {\n      \"title\": \"Category\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to one of freelancermap's professional fields (mode=projectSearch/freelancerSearch).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"web-and-software-development\",\n        \"engineering\",\n        \"graphic-design-and-creative-services\",\n        \"management-and-consulting\",\n        \"digital-marketing\",\n        \"writing-and-translation-services\",\n        \"finance-and-accounting\",\n        \"research-and-analysis\",\n        \"it-services\"\n      ],\n      \"enumTitles\": [\n        \"Any category\",\n        \"Web & Software Development\",\n        \"Engineering\",\n        \"Graphic Design & Creative Services\",\n        \"Management & Consulting\",\n        \"Digital Marketing\",\n        \"Writing & Translation Services\",\n        \"Finance & Accounting\",\n        \"Research & Analysis\",\n        \"IT Services\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"country\": {\n      \"title\": \"Country\",\n      \"type\": \"string\",\n      \"description\": \"Restrict projects or freelancers to a country (mode=projectSearch/freelancerSearch).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\",\n        \"6\",\n        \"7\",\n        \"8\",\n        \"10\",\n        \"11\",\n        \"12\",\n        \"13\",\n        \"14\",\n        \"15\",\n        \"27\",\n        \"28\",\n        \"29\",\n        \"30\",\n        \"31\",\n        \"32\",\n        \"33\",\n        \"34\",\n        \"35\",\n        \"36\",\n        \"37\",\n        \"38\",\n        \"39\",\n        \"40\",\n        \"41\",\n        \"42\",\n        \"43\",\n        \"44\",\n        \"45\",\n        \"46\",\n        \"49\",\n        \"50\",\n        \"51\",\n        \"52\",\n        \"54\",\n        \"55\",\n        \"56\",\n        \"58\",\n        \"59\",\n        \"60\",\n        \"62\",\n        \"63\",\n        \"64\",\n        \"66\",\n        \"67\",\n        \"68\",\n        \"69\",\n        \"70\",\n        \"71\",\n        \"72\",\n        \"73\",\n        \"74\",\n        \"76\",\n        \"77\",\n        \"78\",\n        \"80\",\n        \"81\",\n        \"82\",\n        \"83\",\n        \"84\",\n        \"85\",\n        \"86\",\n        \"87\",\n        \"88\",\n        \"89\",\n        \"90\",\n        \"91\",\n        \"93\",\n        \"94\",\n        \"95\",\n        \"96\",\n        \"97\",\n        \"98\",\n        \"99\",\n        \"100\",\n        \"101\",\n        \"102\",\n        \"103\",\n        \"104\",\n        \"106\",\n        \"107\",\n        \"108\",\n        \"110\",\n        \"111\",\n        \"112\",\n        \"113\",\n        \"114\",\n        \"115\",\n        \"116\",\n        \"117\",\n        \"118\",\n        \"119\",\n        \"120\",\n        \"122\",\n        \"123\",\n        \"124\",\n        \"126\",\n        \"128\",\n        \"129\",\n        \"130\",\n        \"131\",\n        \"133\",\n        \"134\",\n        \"135\",\n        \"139\",\n        \"141\",\n        \"142\",\n        \"143\",\n        \"145\",\n        \"147\",\n        \"148\",\n        \"149\",\n        \"150\",\n        \"151\",\n        \"152\",\n        \"153\",\n        \"154\",\n        \"155\",\n        \"156\",\n        \"157\",\n        \"158\",\n        \"159\",\n        \"160\",\n        \"161\",\n        \"162\",\n        \"163\",\n        \"164\",\n        \"165\",\n        \"166\",\n        \"167\",\n        \"168\",\n        \"169\",\n        \"170\",\n        \"171\",\n        \"172\",\n        \"173\",\n        \"174\",\n        \"175\",\n        \"176\",\n        \"177\",\n        \"178\",\n        \"179\",\n        \"180\",\n        \"181\",\n        \"182\",\n        \"183\",\n        \"184\",\n        \"185\",\n        \"186\",\n        \"187\",\n        \"188\",\n        \"189\",\n        \"190\",\n        \"191\",\n        \"192\",\n        \"193\",\n        \"194\",\n        \"196\",\n        \"197\",\n        \"198\",\n        \"199\"\n      ],\n      \"enumTitles\": [\n        \"Any country\",\n        \"Germany\",\n        \"Austria\",\n        \"Switzerland\",\n        \"United Kingdom\",\n        \"USA\",\n        \"Russian Federation\",\n        \"Spain\",\n        \"Italy\",\n        \"Liechtenstein\",\n        \"Ukraine\",\n        \"Hungary\",\n        \"New Zealand\",\n        \"France\",\n        \"Slovakia\",\n        \"Egypt\",\n        \"Albania\",\n        \"Algeria\",\n        \"Antigua and Barbuda\",\n        \"Argentina\",\n        \"Armenia\",\n        \"Australia\",\n        \"Bahamas\",\n        \"Bahrain\",\n        \"Bangladesh\",\n        \"Barbados\",\n        \"Belarus\",\n        \"Belgium\",\n        \"Belize\",\n        \"Benin\",\n        \"Bermuda\",\n        \"Bolivia\",\n        \"Botswana\",\n        \"Brazil\",\n        \"Bulgaria\",\n        \"Chile\",\n        \"China\",\n        \"Costa Rica\",\n        \"Denmark\",\n        \"Dominican Republic\",\n        \"Estonia\",\n        \"Finland\",\n        \"Georgia\",\n        \"Grenada\",\n        \"Greece\",\n        \"Guadeloupe\",\n        \"Guatemala\",\n        \"Guinea\",\n        \"Guyana\",\n        \"Haiti\",\n        \"Hong Kong\",\n        \"India\",\n        \"Indonesia\",\n        \"Iraq\",\n        \"Ireland\",\n        \"Iceland\",\n        \"Israel\",\n        \"Jamaica\",\n        \"Japan\",\n        \"Jordan\",\n        \"Cameroon\",\n        \"Canada\",\n        \"Kazakhstan\",\n        \"Qatar\",\n        \"Kenya\",\n        \"Kyrgyzstan\",\n        \"Colombia\",\n        \"Croatia\",\n        \"Cuba\",\n        \"Kuwait\",\n        \"Latvia\",\n        \"Liberia\",\n        \"Lithuania\",\n        \"Luxembourg\",\n        \"Macedonia\",\n        \"Malaysia\",\n        \"Malta\",\n        \"Morocco\",\n        \"Mexico\",\n        \"Monaco\",\n        \"Montserrat\",\n        \"Mozambique\",\n        \"Namibia\",\n        \"Nepal\",\n        \"Netherlands\",\n        \"Norway\",\n        \"Oman\",\n        \"Pakistan\",\n        \"Paraguay\",\n        \"Peru\",\n        \"Philippines\",\n        \"Poland\",\n        \"Portugal\",\n        \"Puerto Rico\",\n        \"Romania\",\n        \"Zambia\",\n        \"Saudi Arabia\",\n        \"Sweden\",\n        \"Senegal\",\n        \"Zimbabwe\",\n        \"Singapore\",\n        \"Slovenia\",\n        \"Sri Lanka\",\n        \"South Africa\",\n        \"Tajikistan\",\n        \"Thailand\",\n        \"Czech Republic\",\n        \"Tunisia\",\n        \"Turkey\",\n        \"Uruguay\",\n        \"Uzbekistan\",\n        \"Venezuela\",\n        \"United Arab Emirates\",\n        \"Yemen\",\n        \"Cyprus\",\n        \"Lebanon\",\n        \"Serbia\",\n        \"Bosnia-Herzegovina\",\n        \"Vietnam\",\n        \"Nigeria\",\n        \"Moldova\",\n        \"Montenegro\",\n        \"San Marino\",\n        \"Iran\",\n        \"Afghanistan\",\n        \"Syria\",\n        \"Azerbaijan\",\n        \"Myanmar\",\n        \"Cambodia\",\n        \"Mongolia\",\n        \"North Korea\",\n        \"South Korea\",\n        \"Ghana\",\n        \"Niger\",\n        \"Swaziland\",\n        \"Congo\",\n        \"Ethiopia\",\n        \"Tanzania\",\n        \"Papua New Guinea\",\n        \"Fiji\",\n        \"Ecuador\",\n        \"Trinidad and Tobago\",\n        \"Greenland\",\n        \"Angola\",\n        \"Cook Islands\",\n        \"Samoa\",\n        \"Palau\",\n        \"Marschall Islands\",\n        \"Mauritius\",\n        \"Uganda\",\n        \"Palestine\",\n        \"Panama\",\n        \"El Salvador\",\n        \"Honduras\",\n        \"Libya\",\n        \"Maldives\",\n        \"Nicaragua\",\n        \"Madagascar\",\n        \"Sudan\",\n        \"Spain (Canary Islands)\",\n        \"Cape Verde\",\n        \"Seychelles\",\n        \"Andorra\",\n        \"Kosovo\",\n        \"Taiwan\",\n        \"Laos\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"city\": {\n      \"title\": \"City\",\n      \"type\": \"string\",\n      \"description\": \"City name, e.g. Berlin, London or Dublin (mode=projectSearch/freelancerSearch). Combine with radiusKm for a wider catchment area.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"radiusKm\": {\n      \"title\": \"Radius around city (km)\",\n      \"type\": \"integer\",\n      \"description\": \"Search radius around the city (mode=projectSearch/freelancerSearch). Only used together with city.\",\n      \"minimum\": 1,\n      \"maximum\": 500\n    },\n    \"industry\": {\n      \"title\": \"Client industry\",\n      \"type\": \"string\",\n      \"description\": \"Restrict projects to a client industry (mode=projectSearch).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"24\",\n        \"1\",\n        \"9\",\n        \"7\",\n        \"8\",\n        \"2\",\n        \"10\",\n        \"14\",\n        \"3\",\n        \"22\",\n        \"6\",\n        \"12\",\n        \"18\",\n        \"21\",\n        \"5\",\n        \"11\",\n        \"23\",\n        \"13\",\n        \"16\",\n        \"20\"\n      ],\n      \"enumTitles\": [\n        \"Any industry\",\n        \"IT\",\n        \"Plant and Mechanical Engineering\",\n        \"Finance\",\n        \"Energy Industry\",\n        \"Manufacturing\",\n        \"Automotive\",\n        \"Trade\",\n        \"Medicine and Pharmaceuticals\",\n        \"Construction\",\n        \"Insurance\",\n        \"Electrical Engineering\",\n        \"Aerospace\",\n        \"Transportation\",\n        \"Traffic and Logistics\",\n        \"Chemical Industry\",\n        \"Universities and Authorities and Associations\",\n        \"Defense\",\n        \"Media and Entertainment\",\n        \"Telecommunications\",\n        \"Corporate Management\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"remoteType\": {\n      \"title\": \"Workplace type\",\n      \"type\": \"string\",\n      \"description\": \"On-site, hybrid (any partial remote share) or fully remote projects (mode=projectSearch).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"onsite\",\n        \"hybrid\",\n        \"remote\"\n      ],\n      \"enumTitles\": [\n        \"Any workplace\",\n        \"On-site\",\n        \"Hybrid\",\n        \"Remote\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"contractType\": {\n      \"title\": \"Contract type\",\n      \"type\": \"string\",\n      \"description\": \"Freelance, permanent-position or agency/employee-leasing projects (mode=projectSearch).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"contracting\",\n        \"permanent_position\",\n        \"employee_leasing\"\n      ],\n      \"enumTitles\": [\n        \"Any contract type\",\n        \"Freelance\",\n        \"Permanent\",\n        \"Agency contract\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort order\",\n      \"type\": \"string\",\n      \"description\": \"Result ordering. Recently-updated and lowest-rate sorting apply to freelancer profiles; projects fall back to newest (mode=projectSearch/freelancerSearch).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"newest\",\n        \"relevant\",\n        \"recentlyUpdated\",\n        \"lowestRate\"\n      ],\n      \"enumTitles\": [\n        \"Newest first\",\n        \"Most relevant\",\n        \"Recently updated first\",\n        \"Lowest rate first\"\n      ],\n      \"default\": \"newest\",\n      \"prefill\": \"newest\"\n    },\n    \"postedWithinDays\": {\n      \"title\": \"Posted within (days)\",\n      \"type\": \"integer\",\n      \"description\": \"Only projects published within this many days (mode=projectSearch).\",\n      \"minimum\": 1,\n      \"maximum\": 365\n    },\n    \"afterProjectId\": {\n      \"title\": \"Only projects newer than ID\",\n      \"type\": \"integer\",\n      \"description\": \"Keep only projects whose freelancermap project ID is greater than this value, for incremental runs (mode=projectSearch).\",\n      \"minimum\": 1\n    },\n    \"endClientOnly\": {\n      \"title\": \"Direct end-client projects only\",\n      \"type\": \"boolean\",\n      \"description\": \"Only projects posted directly by the hiring company, excluding agency reposts (mode=projectSearch).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeDachRegion\": {\n      \"title\": \"Include Germany, Austria and Switzerland\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the much larger Germany/Austria/Switzerland pool that freelancermap hides from its default international view (mode=projectSearch/freelancerSearch).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"technologySlug\": {\n      \"title\": \"Skill or technology\",\n      \"type\": \"string\",\n      \"description\": \"A freelancermap skill tag slug, e.g. python-programming-language, sap-hana or amazon-web-services (mode=projectSearch/freelancerSearch). A full /projects/<slug> URL is also accepted.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"minDurationMonths\": {\n      \"title\": \"Minimum project duration (months)\",\n      \"type\": \"integer\",\n      \"description\": \"Drop projects whose disclosed duration is shorter than this. Projects without a duration are kept (mode=projectSearch).\",\n      \"minimum\": 0,\n      \"maximum\": 120\n    },\n    \"language\": {\n      \"title\": \"Spoken language\",\n      \"type\": \"string\",\n      \"description\": \"Only freelancers who list this language (mode=freelancerSearch).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"35\",\n        \"33\",\n        \"1\",\n        \"30\",\n        \"41\",\n        \"40\",\n        \"2\",\n        \"3\",\n        \"32\",\n        \"23\",\n        \"4\",\n        \"13\",\n        \"7\",\n        \"6\",\n        \"8\",\n        \"37\",\n        \"5\",\n        \"9\",\n        \"27\",\n        \"10\",\n        \"26\",\n        \"11\",\n        \"12\",\n        \"39\",\n        \"36\",\n        \"28\",\n        \"29\",\n        \"14\",\n        \"15\",\n        \"16\",\n        \"17\",\n        \"18\",\n        \"19\",\n        \"31\",\n        \"34\",\n        \"21\",\n        \"43\",\n        \"22\",\n        \"20\",\n        \"38\",\n        \"42\",\n        \"24\",\n        \"25\"\n      ],\n      \"enumTitles\": [\n        \"Any language\",\n        \"Albanian\",\n        \"Amharic\",\n        \"Arabic\",\n        \"Bashkir\",\n        \"Belarusian\",\n        \"Bosnian\",\n        \"Bulgarian\",\n        \"Chinese\",\n        \"Croatian\",\n        \"Czech\",\n        \"Danish\",\n        \"Dutch\",\n        \"English\",\n        \"Finnish\",\n        \"French\",\n        \"Georgian\",\n        \"German\",\n        \"Greek\",\n        \"Hebrew\",\n        \"Hindi\",\n        \"Hungarian\",\n        \"Italian\",\n        \"Japanese\",\n        \"Korean\",\n        \"Kurdish\",\n        \"Latvian\",\n        \"Lithuanian\",\n        \"Norwegian\",\n        \"Persian\",\n        \"Polish\",\n        \"Portuguese\",\n        \"Romanian\",\n        \"Russian\",\n        \"Serbian\",\n        \"Sinhala\",\n        \"Slovak\",\n        \"Slovenian\",\n        \"Spanish\",\n        \"Swedish\",\n        \"Telugu\",\n        \"Thai\",\n        \"Turkish\",\n        \"Ukrainian\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"maxHourlyRate\": {\n      \"title\": \"Maximum hourly rate\",\n      \"type\": \"integer\",\n      \"description\": \"Only freelancers quoting at or below this hourly rate, in their own currency (mode=freelancerSearch).\",\n      \"minimum\": 1,\n      \"maximum\": 2000\n    },\n    \"maxDailyRate\": {\n      \"title\": \"Maximum daily rate\",\n      \"type\": \"integer\",\n      \"description\": \"Only freelancers quoting at or below this daily rate, in their own currency (mode=freelancerSearch).\",\n      \"minimum\": 1,\n      \"maximum\": 20000\n    },\n    \"updatedWithinDays\": {\n      \"title\": \"Profile updated within (days)\",\n      \"type\": \"integer\",\n      \"description\": \"Only freelancer profiles updated within this many days (mode=freelancerSearch).\",\n      \"minimum\": 1,\n      \"maximum\": 365\n    },\n    \"minAvailabilityPercent\": {\n      \"title\": \"Minimum availability (%)\",\n      \"type\": \"integer\",\n      \"description\": \"Only freelancers who report at least this much availability (mode=freelancerSearch).\",\n      \"minimum\": 1,\n      \"maximum\": 100\n    },\n    \"hasAttachmentsOnly\": {\n      \"title\": \"Only profiles with a CV or portfolio file\",\n      \"type\": \"boolean\",\n      \"description\": \"Only freelancers who uploaded a CV/portfolio attachment (mode=freelancerSearch).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"openToPermanentJobs\": {\n      \"title\": \"Only freelancers open to permanent positions\",\n      \"type\": \"boolean\",\n      \"description\": \"Only freelancers open to permanent-position offers (mode=freelancerSearch).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"openToAgencyContract\": {\n      \"title\": \"Only freelancers open to agency contracts\",\n      \"type\": \"boolean\",\n      \"description\": \"Only freelancers open to agency/employee-leasing contracts (mode=freelancerSearch).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"excludeUnavailable\": {\n      \"title\": \"Exclude fully unavailable freelancers\",\n      \"type\": \"boolean\",\n      \"description\": \"Drop freelancers marked fully unavailable (mode=freelancerSearch).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"recentlyActiveOnly\": {\n      \"title\": \"Only recently active profiles\",\n      \"type\": \"boolean\",\n      \"description\": \"Only freelancers whose profiles were updated recently (mode=freelancerSearch).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"requireDisplayedName\": {\n      \"title\": \"Only freelancers with a public name\",\n      \"type\": \"boolean\",\n      \"description\": \"Skip profiles that hide the freelancer's name (mode=freelancerSearch).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"verifiedOnly\": {\n      \"title\": \"Only verified profiles\",\n      \"type\": \"boolean\",\n      \"description\": \"Only profiles marked verified by freelancermap (mode=freelancerSearch/freelancerProfile).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeDetails\": {\n      \"title\": \"Fetch full detail for each result\",\n      \"type\": \"boolean\",\n      \"description\": \"Enrich every search result with its detail page (full description, skills, budget, rate, history and contact block). Turn off for the fastest, cheapest runs (mode=projectSearch/freelancerSearch).\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"projectSlugsOrUrls\": {\n      \"title\": \"Project URLs or slugs\",\n      \"type\": \"array\",\n      \"description\": \"Project URLs or slugs to fetch (mode=projectDetail).\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"profileSlugsOrUrls\": {\n      \"title\": \"Freelancer profile URLs or slugs\",\n      \"type\": \"array\",\n      \"description\": \"Freelancer profile URLs or slugs to fetch (mode=freelancerProfile).\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"minExperienceYears\": {\n      \"title\": \"Minimum years of experience\",\n      \"type\": \"integer\",\n      \"description\": \"Drop freelancer profiles with fewer disclosed years of experience. Profiles without the field are kept (mode=freelancerProfile).\",\n      \"minimum\": 0,\n      \"maximum\": 60\n    },\n    \"availableOnly\": {\n      \"title\": \"Only currently available freelancers\",\n      \"type\": \"boolean\",\n      \"description\": \"Only emit profiles marked fully available (mode=freelancerProfile).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum records\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on emitted records. Search modes split each query across freelancermap's own filters instead of page numbers, so broad queries can return well over one results page.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 50,\n      \"prefill\": 1\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Freelancermap Projects & Freelancer Profiles\n\nScrape live IT project listings and freelancer profiles from **freelancermap.com**, one of Europe's largest freelance marketplaces. Search by keyword, skill, category, country, city, contract type and workplace setup, or paste project/profile URLs for a full detail export. Everything runs over plain HTTP with no account, cookies or proxy setup.\n\n## Highlights\n\n- **Four modes** — project search, freelancer search, project detail and freelancer profile detail.\n- **Multiple queries per run** — `searchQueries` accepts a list and merges the results.\n- **Paste any freelancermap URL** — search URLs keep their filters; direct project/profile URLs become detail records.\n- **Far more than one results page** — anonymous freelancermap only serves page 1 per search, so this actor splits each query across the site's own facets (contract type, workplace, category, country, industry, date, language, rates, availability) and de-duplicates the merged pool.\n- **Full project rows** — description, skills, industry, contract and remote share, budget amount/currency, start and duration, workload, status flags, dates, reference number, company link, poster/company block and locations.\n- **Full freelancer rows** — rate and currency, experience, skills, spoken languages, availability, travel preference, certificates, project history, portfolio, recommendations, attachment file names, membership/freshness signals and avatar.\n- **Omit-empty output** — fields the source does not publish are left out instead of being sent as `null`.\n- **No credentials, no proxy** — freelancermap serves all of this publicly.\n\n## Modes\n\n| Mode | What it does |\n|---|---|\n| `projectSearch` | Search or browse IT projects. |\n| `freelancerSearch` | Search or browse freelancer profiles. |\n| `projectDetail` | Fetch full records for project URLs or slugs. |\n| `freelancerProfile` | Fetch full records for freelancer profile URLs or slugs. |\n\n## Project output fields\n\nSearch rows use `recordType: \"projectListing\"`; detail rows use `recordType: \"project\"`.\n\n`projectId`, `slug`, `title`, `company`, `companyUrl`, `companyVerified` (only when true), `city`, `country`, `locations[]`, `additionalLocations[]`, `states[]`, `contractType`, `remotePercent`, `remoteType`, `industry`, `skills[]`, `budget`, `budgetAmount`, `budgetCurrency`, `startText`, `startYear`, `startMonth`, `startAvailability`, `duration`, `durationText`, `durationMonths`, `extensionPossible`, `workloadPercent`, `isEndClient`, `isEndcustomerProject`, `isTopProject`, `isActive`, `applicationsPaused`, `isArchived`, `updateCount`, `description`, `created`, `updated`, `postedLabel`, `expires`, `referenceNumber`, `posterName`, `posterId`, `posterCompany`, `posterCity`, `posterZip`, `posterCountry`, `posterWebsite`, `posterAccountType`, `posterMembership`, `posterMemberSince`, `searchQuery`, `sourceUrl`, `scrapedAt`.\n\n- `remotePercent` is the published remote share (0, 20, 40, 60, 80 or 100); `remoteType` is `On-site`, `Hybrid` or `Remote`.\n- `contractType` is `Freelance`, `Permanent` or `Agency contract`.\n- `budget` keeps the source object for compatibility; `budgetAmount` is the amount in whole currency units and `budgetCurrency` is the ISO code.\n- `startAvailability` and `postedLabel` are compatibility aliases (`startText` and the posting date). `duration` is the published duration text, as before.\n- Dates are ISO 8601. `poster*` fields describe the recruiter/company account that published the listing, never a private email or phone number.\n\n## Freelancer output fields\n\nSearch rows use `recordType: \"freelancerListing\"`; detail rows use `recordType: \"freelancer\"`.\n\n`profileId`, `slug`, `name`, `headline`, `about`, `city`, `country`, `postalCode`, `rate`, `rateCurrency`, `experienceYears`, `freelancerSinceYear`, `graduation`, `skills[]`, `skillsCount`, `skillsSummary`, `languages[]`, `availability`, `availabilityPercent`, `unavailableUntil`, `profileCompletionPercent`, `isVerified`, `isActive`, `isAnonymousProfile`, `membershipTier`, `travelAvailability`, `certificates[]`, `projectHistory[]`, `portfolioItems[]`, `reviews[]`, `avatarUrl`, `websiteUrl`, `youtubeUrl`, `attachmentNames[]`, `subCategories[]`, `memberSince`, `profileUpdatedAt`, `lastLoginAt`, `hasAttachments`, `hasPortfolio`, `hasCertifications`, `hasRatings`, `permanentJobs`, `employeeLeasingJobs`, `searchQuery`, `sourceUrl`, `scrapedAt`.\n\n- `languages[]` entries look like `{\"language\": \"English\", \"code\": \"en\", \"level\": 3}` (level 1-4).\n- `rate` is the figure the freelancer published; freelancermap does not expose whether it is hourly or daily.\n- `reviews[]` contains only public recommendations (`body`, `position`, `fullName`, `company`, `url`). Reviewer phone numbers are never exported.\n- `attachmentNames[]` lists uploaded CV/portfolio file names; the download links themselves require a freelancermap login, so they are not included.\n- `availabilityPercent` is 0, 20, 40, 60, 80 or 100 and `availability` is `Not available`, `Partially available` or `Available`.\n\n## Input reference\n\n| Field | Type | Default | Applies to |\n|---|---|---|---|\n| `mode` | select | `projectSearch` | all |\n| `searchQueries` | string list | – | searches |\n| `startUrls` | URL list | – | searches (search URLs or direct detail URLs) |\n| `category` | select | – | searches |\n| `country` | select (165 countries) | – | searches |\n| `city` | text | – | searches |\n| `radiusKm` | integer 1-500 | – | searches |\n| `industry` | select | – | project search |\n| `remoteType` | `onsite` / `hybrid` / `remote` | – | project search |\n| `contractType` | `contracting` / `permanent_position` / `employee_leasing` | – | project search |\n| `sortBy` | `newest` / `relevant` / `recentlyUpdated` / `lowestRate` | `newest` | searches |\n| `postedWithinDays` | integer 1-365 | – | project search |\n| `afterProjectId` | integer | – | project search |\n| `endClientOnly` | boolean | `false` | project search |\n| `includeDachRegion` | boolean | `false` | searches |\n| `technologySlug` | text | – | searches |\n| `minDurationMonths` | integer 0-120 | – | project search |\n| `language` | select (43 languages) | – | freelancer search |\n| `maxHourlyRate` | integer 1-2000 | – | freelancer search |\n| `maxDailyRate` | integer 1-20000 | – | freelancer search |\n| `updatedWithinDays` | integer 1-365 | – | freelancer search |\n| `minAvailabilityPercent` | integer 1-100 | – | freelancer search |\n| `hasAttachmentsOnly` | boolean | `false` | freelancer search |\n| `openToPermanentJobs` | boolean | `false` | freelancer search |\n| `openToAgencyContract` | boolean | `false` | freelancer search |\n| `excludeUnavailable` | boolean | `false` | freelancer search |\n| `recentlyActiveOnly` | boolean | `false` | freelancer search |\n| `requireDisplayedName` | boolean | `false` | freelancer search |\n| `verifiedOnly` | boolean | `false` | freelancer search/profile |\n| `includeDetails` | boolean | `true` | searches |\n| `projectSlugsOrUrls` | string list | – | project detail |\n| `profileSlugsOrUrls` | string list | – | freelancer profile |\n| `minExperienceYears` | integer 0-60 | – | freelancer profile |\n| `availableOnly` | boolean | `false` | freelancer profile |\n| `maxItems` | integer 1-1000 | `50` | all |\n\nThe prefill (one Python project, no detail enrichment) is the cheapest possible run and produces a result on the first request. Turn `includeDetails` off for fast, low-cost bulk listings; turn it on when you need descriptions, budgets and rates on every row.\n\n## Examples\n\nSearch multiple skills and enrich the results:\n\n```json\n{\n  \"mode\": \"projectSearch\",\n  \"searchQueries\": [\"python\", \"rust\", \"golang\"],\n  \"country\": \"1\",\n  \"includeDachRegion\": true,\n  \"includeDetails\": true,\n  \"maxItems\": 100\n}\n```\n\nFind available freelancers in Germany under a rate cap:\n\n```json\n{\n  \"mode\": \"freelancerSearch\",\n  \"searchQueries\": [\"sap\"],\n  \"country\": \"1\",\n  \"language\": \"5\",\n  \"maxHourlyRate\": 90,\n  \"minAvailabilityPercent\": 100,\n  \"maxItems\": 50\n}\n```\n\nRe-use a search you built on freelancermap:\n\n```json\n{\n  \"mode\": \"projectSearch\",\n  \"startUrls\": [\n    {\n      \"url\": \"https://www.freelancermap.com/projects/python?projectContractTypes[]=contracting&remoteInPercent[]=100\"\n    }\n  ],\n  \"maxItems\": 80\n}\n```\n\nFetch exact projects and profiles:\n\n```json\n{\n  \"mode\": \"projectDetail\",\n  \"projectSlugsOrUrls\": [\n    \"https://www.freelancermap.com/project/data-scientist-3066110\",\n    \"sc-cleared-devops-engineer-aws-azure-contract-inside-ir35-6-months-hybrid-london\"\n  ]\n}\n```\n\n```json\n{\n  \"mode\": \"freelancerProfile\",\n  \"profileSlugsOrUrls\": [\"https://www.freelancermap.com/profile/jiri-lamos\"],\n  \"minExperienceYears\": 5\n}\n```\n\nIncremental daily run:\n\n```json\n{\n  \"mode\": \"projectSearch\",\n  \"searchQueries\": [\"java\"],\n  \"includeDachRegion\": true,\n  \"afterProjectId\": 3065000,\n  \"includeDetails\": false,\n  \"maxItems\": 200\n}\n```\n\n## How result coverage works\n\nfreelancermap shows anonymous visitors only the first results page per search (about 22 projects / 18 profiles), and the page number itself is ignored past page 1. To go deeper, this actor asks the same JSON endpoint for several facet slices of the query — different sort orders, contract types, workplace buckets, categories, countries, industries, posting dates, languages, rate caps and availability thresholds — then merges the slices and removes duplicates.\n\nThat is why a broad query can return hundreds of rows without an account. When the source genuinely runs out of matching records, the run stops with the real total; it never pads the dataset.\n\n## Use cases\n\n- Recruiters and staffing agencies monitoring fresh freelance IT demand.\n- Sourcing shortlists of available freelancers by skill, language and rate.\n- Rate and skill benchmarking across European IT markets.\n- Lead generation from projects that disclose the hiring company and poster.\n\n## Data source and limitations\n\nfreelancermap.com is a public marketplace. This actor is independent and not affiliated with freelancermap.\n\n- Project budgets are published on a minority of listings; workload and some start dates are also optional. Missing fields are omitted.\n- Placeholder locations such as `Not Specified` are omitted rather than emitted as a city. `city` + `radiusKm` keeps every result inside the radius even when the city name differs.\n- Freelancer rates are published by roughly 85 % of profiles and the unit (hourly or daily) is not exposed by the source. The source offers one lower-rate ordering, exposed as `lowestRate`.\n- Project category is not part of the public project payload; use the `category` search filter instead of expecting a category field on each row.\n- Freelancer email, phone and attachment downloads require a paid freelancermap login and are deliberately not scraped.\n- The `.de`, `.at` and `.ch` sites expose a regional slice of the same inventory; this actor queries `.com` with `includeDachRegion` so you get the full pool.\n\n## FAQ\n\n**Do I need a freelancermap account, cookies or a proxy?**\nNo. All four modes use public endpoints and pages. There is no login, cookie, API key or proxy option.\n\n**How many records can one search return?**\nBroad queries commonly return several hundred unique projects or profiles; narrow ones return only what the source has. `maxItems` is the hard cap (up to 1,000 per run). The actor stops honestly when the source is exhausted.\n\n**Why is `description` missing on some rows?**\nSearch rows are enriched from the detail page when `includeDetails` is on. If a detail page is temporarily unavailable, the listing row is still emitted without the extra fields rather than failing the run.\n\n**Why do some freelancer profiles have no name?**\nFreelancers can hide their name from anonymous visitors; those rows omit `name` instead of writing a placeholder. Enable `requireDisplayedName` to skip them, or leave it off to keep the row with its headline and skills.\n\n**Is the freelancer rate hourly or daily?**\nThe profile publishes one figure, and freelancermap does not expose its unit. The actor reports the figure in `rate` with `rateCurrency` and leaves the interpretation to you.\n\n**Why is `budgetAmount` absent on most projects?**\nMost posters do not disclose a budget publicly. When they do, both `budgetAmount` and `budgetCurrency` are filled alongside the source `budget` object.\n\n**What does `includeDachRegion` change?**\nfreelancermap hides most Germany/Austria/Switzerland listings from its default international view. Enable it to search the full DACH pool, which is usually the largest part of the marketplace.\n\n**How does `afterProjectId` help scheduled runs?**\nProject IDs increase over time. Store the highest ID from one run and pass it as `afterProjectId` next time to keep only newer projects. IDs are sequential but not a guaranteed timestamp, so treat it as an incremental filter rather than an exact date boundary.\n\n**Can I paste a search URL from the site?**\nYes. Put it in `startUrls`; the actor copies the supported query parameters. A URL pointing directly at a project or profile is emitted as a detail record.\n\n**How fresh are profile activity fields?**\n`profileUpdatedAt` and `lastLoginAt` come from the public profile payload. They are signals published by freelancermap, not a guarantee that the freelancer is currently taking work.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "freelancermap-it-projects-and-freelancer-finder",
      "title": "Freelancermap Projects & Freelancer Profiles",
      "description": "Scrape freelancermap IT projects and freelancer profiles by keyword, category, country, contract and remote filters. Returns skills, budgets, rates, descriptions, history and contact details.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Freelancermap Projects & Freelancer Profiles\n\nScrape live IT project listings and freelancer profiles from **freelancermap.com**, one of Europe's largest freelance marketplaces. Search by keyword, skill, category, country, city, contract type and workplace setup, or paste project/profile URLs for a full detail export. Everything runs over plain HTTP with no account, cookies or proxy setup.\n\n## Highlights\n\n- **Four modes** — project search, freelancer search, project detail and freelancer profile detail.\n- **Multiple queries per run** — `searchQueries` accepts a list and merges the results.\n- **Paste any freelancermap URL** — search URLs keep their filters; direct project/profile URLs become detail records.\n- **Far more than one results page** — anonymous freelancermap only serves page 1 per search, so this actor splits each query across the site's own facets (contract type, workplace, category, country, industry, date, language, rates, availability) and de-duplicates the merged pool.\n- **Full project rows** — description, skills, industry, contract and remote share, budget amount/currency, start and duration, workload, status flags, dates, reference number, company link, poster/company block and locations.\n- **Full freelancer rows** — rate and currency, experience, skills, spoken languages, availability, travel preference, certificates, project history, portfolio, recommendations, attachment file names, membership/freshness signals and avatar.\n- **Omit-empty output** — fields the source does not publish are left out instead of being sent as `null`.\n- **No credentials, no proxy** — freelancermap serves all of this publicly.\n\n## Modes\n\n| Mode | What it does |\n|---|---|\n| `projectSearch` | Search or browse IT projects. |\n| `freelancerSearch` | Search or browse freelancer profiles. |\n| `projectDetail` | Fetch full records for project URLs or slugs. |\n| `freelancerProfile` | Fetch full records for freelancer profile URLs or slugs. |\n\n## Project output fields\n\nSearch rows use `recordType: \"projectListing\"`; detail rows use `recordType: \"project\"`.\n\n`projectId`, `slug`, `title`, `company`, `companyUrl`, `companyVerified` (only when true), `city`, `country`, `locations[]`, `additionalLocations[]`, `states[]`, `contractType`, `remotePercent`, `remoteType`, `industry`, `skills[]`, `budget`, `budgetAmount`, `budgetCurrency`, `startText`, `startYear`, `startMonth`, `startAvailability`, `duration`, `durationText`, `durationMonths`, `extensionPossible`, `workloadPercent`, `isEndClient`, `isEndcustomerProject`, `isTopProject`, `isActive`, `applicationsPaused`, `isArchived`, `updateCount`, `description`, `created`, `updated`, `postedLabel`, `expires`, `referenceNumber`, `posterName`, `posterId`, `posterCompany`, `posterCity`, `posterZip`, `posterCountry`, `posterWebsite`, `posterAccountType`, `posterMembership`, `posterMemberSince`, `searchQuery`, `sourceUrl`, `scrapedAt`.\n\n- `remotePercent` is the published remote share (0, 20, 40, 60, 80 or 100); `remoteType` is `On-site`, `Hybrid` or `Remote`.\n- `contractType` is `Freelance`, `Permanent` or `Agency contract`.\n- `budget` keeps the source object for compatibility; `budgetAmount` is the amount in whole currency units and `budgetCurrency` is the ISO code.\n- `startAvailability` and `postedLabel` are compatibility aliases (`startText` and the posting date). `duration` is the published duration text, as before.\n- Dates are ISO 8601. `poster*` fields describe the recruiter/company account that published the listing, never a private email or phone number.\n\n## Freelancer output fields\n\nSearch rows use `recordType: \"freelancerListing\"`; detail rows use `recordType: \"freelancer\"`.\n\n`profileId`, `slug`, `name`, `headline`, `about`, `city`, `country`, `postalCode`, `rate`, `rateCurrency`, `experienceYears`, `freelancerSinceYear`, `graduation`, `skills[]`, `skillsCount`, `skillsSummary`, `languages[]`, `availability`, `availabilityPercent`, `unavailableUntil`, `profileCompletionPercent`, `isVerified`, `isActive`, `isAnonymousProfile`, `membershipTier`, `travelAvailability`, `certificates[]`, `projectHistory[]`, `portfolioItems[]`, `reviews[]`, `avatarUrl`, `websiteUrl`, `youtubeUrl`, `attachmentNames[]`, `subCategories[]`, `memberSince`, `profileUpdatedAt`, `lastLoginAt`, `hasAttachments`, `hasPortfolio`, `hasCertifications`, `hasRatings`, `permanentJobs`, `employeeLeasingJobs`, `searchQuery`, `sourceUrl`, `scrapedAt`.\n\n- `languages[]` entries look like `{\"language\": \"English\", \"code\": \"en\", \"level\": 3}` (level 1-4).\n- `rate` is the figure the freelancer published; freelancermap does not expose whether it is hourly or daily.\n- `reviews[]` contains only public recommendations (`body`, `position`, `fullName`, `company`, `url`). Reviewer phone numbers are never exported.\n- `attachmentNames[]` lists uploaded CV/portfolio file names; the download links themselves require a freelancermap login, so they are not included.\n- `availabilityPercent` is 0, 20, 40, 60, 80 or 100 and `availability` is `Not available`, `Partially available` or `Available`.\n\n## Input reference\n\n| Field | Type | Default | Applies to |\n|---|---|---|---|\n| `mode` | select | `projectSearch` | all |\n| `searchQueries` | string list | – | searches |\n| `startUrls` | URL list | – | searches (search URLs or direct detail URLs) |\n| `category` | select | – | searches |\n| `country` | select (165 countries) | – | searches |\n| `city` | text | – | searches |\n| `radiusKm` | integer 1-500 | – | searches |\n| `industry` | select | – | project search |\n| `remoteType` | `onsite` / `hybrid` / `remote` | – | project search |\n| `contractType` | `contracting` / `permanent_position` / `employee_leasing` | – | project search |\n| `sortBy` | `newest` / `relevant` / `recentlyUpdated` / `lowestRate` | `newest` | searches |\n| `postedWithinDays` | integer 1-365 | – | project search |\n| `afterProjectId` | integer | – | project search |\n| `endClientOnly` | boolean | `false` | project search |\n| `includeDachRegion` | boolean | `false` | searches |\n| `technologySlug` | text | – | searches |\n| `minDurationMonths` | integer 0-120 | – | project search |\n| `language` | select (43 languages) | – | freelancer search |\n| `maxHourlyRate` | integer 1-2000 | – | freelancer search |\n| `maxDailyRate` | integer 1-20000 | – | freelancer search |\n| `updatedWithinDays` | integer 1-365 | – | freelancer search |\n| `minAvailabilityPercent` | integer 1-100 | – | freelancer search |\n| `hasAttachmentsOnly` | boolean | `false` | freelancer search |\n| `openToPermanentJobs` | boolean | `false` | freelancer search |\n| `openToAgencyContract` | boolean | `false` | freelancer search |\n| `excludeUnavailable` | boolean | `false` | freelancer search |\n| `recentlyActiveOnly` | boolean | `false` | freelancer search |\n| `requireDisplayedName` | boolean | `false` | freelancer search |\n| `verifiedOnly` | boolean | `false` | freelancer search/profile |\n| `includeDetails` | boolean | `true` | searches |\n| `projectSlugsOrUrls` | string list | – | project detail |\n| `profileSlugsOrUrls` | string list | – | freelancer profile |\n| `minExperienceYears` | integer 0-60 | – | freelancer profile |\n| `availableOnly` | boolean | `false` | freelancer profile |\n| `maxItems` | integer 1-1000 | `50` | all |\n\nThe prefill (one Python project, no detail enrichment) is the cheapest possible run and produces a result on the first request. Turn `includeDetails` off for fast, low-cost bulk listings; turn it on when you need descriptions, budgets and rates on every row.\n\n## Examples\n\nSearch multiple skills and enrich the results:\n\n```json\n{\n  \"mode\": \"projectSearch\",\n  \"searchQueries\": [\"python\", \"rust\", \"golang\"],\n  \"country\": \"1\",\n  \"includeDachRegion\": true,\n  \"includeDetails\": true,\n  \"maxItems\": 100\n}\n```\n\nFind available freelancers in Germany under a rate cap:\n\n```json\n{\n  \"mode\": \"freelancerSearch\",\n  \"searchQueries\": [\"sap\"],\n  \"country\": \"1\",\n  \"language\": \"5\",\n  \"maxHourlyRate\": 90,\n  \"minAvailabilityPercent\": 100,\n  \"maxItems\": 50\n}\n```\n\nRe-use a search you built on freelancermap:\n\n```json\n{\n  \"mode\": \"projectSearch\",\n  \"startUrls\": [\n    {\n      \"url\": \"https://www.freelancermap.com/projects/python?projectContractTypes[]=contracting&remoteInPercent[]=100\"\n    }\n  ],\n  \"maxItems\": 80\n}\n```\n\nFetch exact projects and profiles:\n\n```json\n{\n  \"mode\": \"projectDetail\",\n  \"projectSlugsOrUrls\": [\n    \"https://www.freelancermap.com/project/data-scientist-3066110\",\n    \"sc-cleared-devops-engineer-aws-azure-contract-inside-ir35-6-months-hybrid-london\"\n  ]\n}\n```\n\n```json\n{\n  \"mode\": \"freelancerProfile\",\n  \"profileSlugsOrUrls\": [\"https://www.freelancermap.com/profile/jiri-lamos\"],\n  \"minExperienceYears\": 5\n}\n```\n\nIncremental daily run:\n\n```json\n{\n  \"mode\": \"projectSearch\",\n  \"searchQueries\": [\"java\"],\n  \"includeDachRegion\": true,\n  \"afterProjectId\": 3065000,\n  \"includeDetails\": false,\n  \"maxItems\": 200\n}\n```\n\n## How result coverage works\n\nfreelancermap shows anonymous visitors only the first results page per search (about 22 projects / 18 profiles), and the page number itself is ignored past page 1. To go deeper, this actor asks the same JSON endpoint for several facet slices of the query — different sort orders, contract types, workplace buckets, categories, countries, industries, posting dates, languages, rate caps and availability thresholds — then merges the slices and removes duplicates.\n\nThat is why a broad query can return hundreds of rows without an account. When the source genuinely runs out of matching records, the run stops with the real total; it never pads the dataset.\n\n## Use cases\n\n- Recruiters and staffing agencies monitoring fresh freelance IT demand.\n- Sourcing shortlists of available freelancers by skill, language and rate.\n- Rate and skill benchmarking across European IT markets.\n- Lead generation from projects that disclose the hiring company and poster.\n\n## Data source and limitations\n\nfreelancermap.com is a public marketplace. This actor is independent and not affiliated with freelancermap.\n\n- Project budgets are published on a minority of listings; workload and some start dates are also optional. Missing fields are omitted.\n- Placeholder locations such as `Not Specified` are omitted rather than emitted as a city. `city` + `radiusKm` keeps every result inside the radius even when the city name differs.\n- Freelancer rates are published by roughly 85 % of profiles and the unit (hourly or daily) is not exposed by the source. The source offers one lower-rate ordering, exposed as `lowestRate`.\n- Project category is not part of the public project payload; use the `category` search filter instead of expecting a category field on each row.\n- Freelancer email, phone and attachment downloads require a paid freelancermap login and are deliberately not scraped.\n- The `.de`, `.at` and `.ch` sites expose a regional slice of the same inventory; this actor queries `.com` with `includeDachRegion` so you get the full pool.\n\n## FAQ\n\n**Do I need a freelancermap account, cookies or a proxy?**\nNo. All four modes use public endpoints and pages. There is no login, cookie, API key or proxy option.\n\n**How many records can one search return?**\nBroad queries commonly return several hundred unique projects or profiles; narrow ones return only what the source has. `maxItems` is the hard cap (up to 1,000 per run). The actor stops honestly when the source is exhausted.\n\n**Why is `description` missing on some rows?**\nSearch rows are enriched from the detail page when `includeDetails` is on. If a detail page is temporarily unavailable, the listing row is still emitted without the extra fields rather than failing the run.\n\n**Why do some freelancer profiles have no name?**\nFreelancers can hide their name from anonymous visitors; those rows omit `name` instead of writing a placeholder. Enable `requireDisplayedName` to skip them, or leave it off to keep the row with its headline and skills.\n\n**Is the freelancer rate hourly or daily?**\nThe profile publishes one figure, and freelancermap does not expose its unit. The actor reports the figure in `rate` with `rateCurrency` and leaves the interpretation to you.\n\n**Why is `budgetAmount` absent on most projects?**\nMost posters do not disclose a budget publicly. When they do, both `budgetAmount` and `budgetCurrency` are filled alongside the source `budget` object.\n\n**What does `includeDachRegion` change?**\nfreelancermap hides most Germany/Austria/Switzerland listings from its default international view. Enable it to search the full DACH pool, which is usually the largest part of the marketplace.\n\n**How does `afterProjectId` help scheduled runs?**\nProject IDs increase over time. Store the highest ID from one run and pass it as `afterProjectId` next time to keep only newer projects. IDs are sequential but not a guaranteed timestamp, so treat it as an incremental filter rather than an exact date boundary.\n\n**Can I paste a search URL from the site?**\nYes. Put it in `startUrls`; the actor copies the supported query parameters. A URL pointing directly at a project or profile is emitted as a detail record.\n\n**How fresh are profile activity fields?**\n`profileUpdatedAt` and `lastLoginAt` come from the public profile payload. They are signals published by freelancermap, not a guarantee that the freelancer is currently taking work.\n",
      "input": {
        "title": "Freelancermap Scraper Input",
        "description": "Search freelance IT projects or freelancer profiles on freelancermap.com by keyword, category, country, city, contract and workplace filters, or fetch full detail by URL.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to fetch.",
            "editor": "select",
            "enum": [
              "projectSearch",
              "freelancerSearch",
              "projectDetail",
              "freelancerProfile"
            ],
            "enumTitles": [
              "Search freelance projects",
              "Search freelancer profiles",
              "Fetch project details by URL/slug",
              "Fetch freelancer profiles by URL/slug"
            ],
            "default": "projectSearch",
            "prefill": "projectSearch"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "One or more keywords, job titles or technologies. Each query is searched separately and its results are merged (mode=projectSearch/freelancerSearch).",
            "editor": "stringList",
            "default": [],
            "prefill": [
              "python"
            ]
          },
          "startUrls": {
            "title": "Search or detail URLs",
            "type": "array",
            "description": "Optional freelancermap search URLs (filters in the URL are copied) or direct project/profile URLs, as {\"url\": \"...\"} entries. Direct detail URLs are emitted as detail records (mode=projectSearch/freelancerSearch).",
            "editor": "requestListSources",
            "default": [],
            "prefill": []
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "Restrict results to one of freelancermap's professional fields (mode=projectSearch/freelancerSearch).",
            "editor": "select",
            "enum": [
              "",
              "web-and-software-development",
              "engineering",
              "graphic-design-and-creative-services",
              "management-and-consulting",
              "digital-marketing",
              "writing-and-translation-services",
              "finance-and-accounting",
              "research-and-analysis",
              "it-services"
            ],
            "enumTitles": [
              "Any category",
              "Web & Software Development",
              "Engineering",
              "Graphic Design & Creative Services",
              "Management & Consulting",
              "Digital Marketing",
              "Writing & Translation Services",
              "Finance & Accounting",
              "Research & Analysis",
              "IT Services"
            ],
            "default": "",
            "prefill": ""
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Restrict projects or freelancers to a country (mode=projectSearch/freelancerSearch).",
            "editor": "select",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "8",
              "10",
              "11",
              "12",
              "13",
              "14",
              "15",
              "27",
              "28",
              "29",
              "30",
              "31",
              "32",
              "33",
              "34",
              "35",
              "36",
              "37",
              "38",
              "39",
              "40",
              "41",
              "42",
              "43",
              "44",
              "45",
              "46",
              "49",
              "50",
              "51",
              "52",
              "54",
              "55",
              "56",
              "58",
              "59",
              "60",
              "62",
              "63",
              "64",
              "66",
              "67",
              "68",
              "69",
              "70",
              "71",
              "72",
              "73",
              "74",
              "76",
              "77",
              "78",
              "80",
              "81",
              "82",
              "83",
              "84",
              "85",
              "86",
              "87",
              "88",
              "89",
              "90",
              "91",
              "93",
              "94",
              "95",
              "96",
              "97",
              "98",
              "99",
              "100",
              "101",
              "102",
              "103",
              "104",
              "106",
              "107",
              "108",
              "110",
              "111",
              "112",
              "113",
              "114",
              "115",
              "116",
              "117",
              "118",
              "119",
              "120",
              "122",
              "123",
              "124",
              "126",
              "128",
              "129",
              "130",
              "131",
              "133",
              "134",
              "135",
              "139",
              "141",
              "142",
              "143",
              "145",
              "147",
              "148",
              "149",
              "150",
              "151",
              "152",
              "153",
              "154",
              "155",
              "156",
              "157",
              "158",
              "159",
              "160",
              "161",
              "162",
              "163",
              "164",
              "165",
              "166",
              "167",
              "168",
              "169",
              "170",
              "171",
              "172",
              "173",
              "174",
              "175",
              "176",
              "177",
              "178",
              "179",
              "180",
              "181",
              "182",
              "183",
              "184",
              "185",
              "186",
              "187",
              "188",
              "189",
              "190",
              "191",
              "192",
              "193",
              "194",
              "196",
              "197",
              "198",
              "199"
            ],
            "enumTitles": [
              "Any country",
              "Germany",
              "Austria",
              "Switzerland",
              "United Kingdom",
              "USA",
              "Russian Federation",
              "Spain",
              "Italy",
              "Liechtenstein",
              "Ukraine",
              "Hungary",
              "New Zealand",
              "France",
              "Slovakia",
              "Egypt",
              "Albania",
              "Algeria",
              "Antigua and Barbuda",
              "Argentina",
              "Armenia",
              "Australia",
              "Bahamas",
              "Bahrain",
              "Bangladesh",
              "Barbados",
              "Belarus",
              "Belgium",
              "Belize",
              "Benin",
              "Bermuda",
              "Bolivia",
              "Botswana",
              "Brazil",
              "Bulgaria",
              "Chile",
              "China",
              "Costa Rica",
              "Denmark",
              "Dominican Republic",
              "Estonia",
              "Finland",
              "Georgia",
              "Grenada",
              "Greece",
              "Guadeloupe",
              "Guatemala",
              "Guinea",
              "Guyana",
              "Haiti",
              "Hong Kong",
              "India",
              "Indonesia",
              "Iraq",
              "Ireland",
              "Iceland",
              "Israel",
              "Jamaica",
              "Japan",
              "Jordan",
              "Cameroon",
              "Canada",
              "Kazakhstan",
              "Qatar",
              "Kenya",
              "Kyrgyzstan",
              "Colombia",
              "Croatia",
              "Cuba",
              "Kuwait",
              "Latvia",
              "Liberia",
              "Lithuania",
              "Luxembourg",
              "Macedonia",
              "Malaysia",
              "Malta",
              "Morocco",
              "Mexico",
              "Monaco",
              "Montserrat",
              "Mozambique",
              "Namibia",
              "Nepal",
              "Netherlands",
              "Norway",
              "Oman",
              "Pakistan",
              "Paraguay",
              "Peru",
              "Philippines",
              "Poland",
              "Portugal",
              "Puerto Rico",
              "Romania",
              "Zambia",
              "Saudi Arabia",
              "Sweden",
              "Senegal",
              "Zimbabwe",
              "Singapore",
              "Slovenia",
              "Sri Lanka",
              "South Africa",
              "Tajikistan",
              "Thailand",
              "Czech Republic",
              "Tunisia",
              "Turkey",
              "Uruguay",
              "Uzbekistan",
              "Venezuela",
              "United Arab Emirates",
              "Yemen",
              "Cyprus",
              "Lebanon",
              "Serbia",
              "Bosnia-Herzegovina",
              "Vietnam",
              "Nigeria",
              "Moldova",
              "Montenegro",
              "San Marino",
              "Iran",
              "Afghanistan",
              "Syria",
              "Azerbaijan",
              "Myanmar",
              "Cambodia",
              "Mongolia",
              "North Korea",
              "South Korea",
              "Ghana",
              "Niger",
              "Swaziland",
              "Congo",
              "Ethiopia",
              "Tanzania",
              "Papua New Guinea",
              "Fiji",
              "Ecuador",
              "Trinidad and Tobago",
              "Greenland",
              "Angola",
              "Cook Islands",
              "Samoa",
              "Palau",
              "Marschall Islands",
              "Mauritius",
              "Uganda",
              "Palestine",
              "Panama",
              "El Salvador",
              "Honduras",
              "Libya",
              "Maldives",
              "Nicaragua",
              "Madagascar",
              "Sudan",
              "Spain (Canary Islands)",
              "Cape Verde",
              "Seychelles",
              "Andorra",
              "Kosovo",
              "Taiwan",
              "Laos"
            ],
            "default": "",
            "prefill": ""
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City name, e.g. Berlin, London or Dublin (mode=projectSearch/freelancerSearch). Combine with radiusKm for a wider catchment area.",
            "editor": "textfield",
            "default": "",
            "prefill": ""
          },
          "radiusKm": {
            "title": "Radius around city (km)",
            "type": "integer",
            "description": "Search radius around the city (mode=projectSearch/freelancerSearch). Only used together with city.",
            "minimum": 1,
            "maximum": 500
          },
          "industry": {
            "title": "Client industry",
            "type": "string",
            "description": "Restrict projects to a client industry (mode=projectSearch).",
            "editor": "select",
            "enum": [
              "",
              "24",
              "1",
              "9",
              "7",
              "8",
              "2",
              "10",
              "14",
              "3",
              "22",
              "6",
              "12",
              "18",
              "21",
              "5",
              "11",
              "23",
              "13",
              "16",
              "20"
            ],
            "enumTitles": [
              "Any industry",
              "IT",
              "Plant and Mechanical Engineering",
              "Finance",
              "Energy Industry",
              "Manufacturing",
              "Automotive",
              "Trade",
              "Medicine and Pharmaceuticals",
              "Construction",
              "Insurance",
              "Electrical Engineering",
              "Aerospace",
              "Transportation",
              "Traffic and Logistics",
              "Chemical Industry",
              "Universities and Authorities and Associations",
              "Defense",
              "Media and Entertainment",
              "Telecommunications",
              "Corporate Management"
            ],
            "default": "",
            "prefill": ""
          },
          "remoteType": {
            "title": "Workplace type",
            "type": "string",
            "description": "On-site, hybrid (any partial remote share) or fully remote projects (mode=projectSearch).",
            "editor": "select",
            "enum": [
              "",
              "onsite",
              "hybrid",
              "remote"
            ],
            "enumTitles": [
              "Any workplace",
              "On-site",
              "Hybrid",
              "Remote"
            ],
            "default": "",
            "prefill": ""
          },
          "contractType": {
            "title": "Contract type",
            "type": "string",
            "description": "Freelance, permanent-position or agency/employee-leasing projects (mode=projectSearch).",
            "editor": "select",
            "enum": [
              "",
              "contracting",
              "permanent_position",
              "employee_leasing"
            ],
            "enumTitles": [
              "Any contract type",
              "Freelance",
              "Permanent",
              "Agency contract"
            ],
            "default": "",
            "prefill": ""
          },
          "sortBy": {
            "title": "Sort order",
            "type": "string",
            "description": "Result ordering. Recently-updated and lowest-rate sorting apply to freelancer profiles; projects fall back to newest (mode=projectSearch/freelancerSearch).",
            "editor": "select",
            "enum": [
              "newest",
              "relevant",
              "recentlyUpdated",
              "lowestRate"
            ],
            "enumTitles": [
              "Newest first",
              "Most relevant",
              "Recently updated first",
              "Lowest rate first"
            ],
            "default": "newest",
            "prefill": "newest"
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "type": "integer",
            "description": "Only projects published within this many days (mode=projectSearch).",
            "minimum": 1,
            "maximum": 365
          },
          "afterProjectId": {
            "title": "Only projects newer than ID",
            "type": "integer",
            "description": "Keep only projects whose freelancermap project ID is greater than this value, for incremental runs (mode=projectSearch).",
            "minimum": 1
          },
          "endClientOnly": {
            "title": "Direct end-client projects only",
            "type": "boolean",
            "description": "Only projects posted directly by the hiring company, excluding agency reposts (mode=projectSearch).",
            "default": false,
            "prefill": false
          },
          "includeDachRegion": {
            "title": "Include Germany, Austria and Switzerland",
            "type": "boolean",
            "description": "Include the much larger Germany/Austria/Switzerland pool that freelancermap hides from its default international view (mode=projectSearch/freelancerSearch).",
            "default": false,
            "prefill": false
          },
          "technologySlug": {
            "title": "Skill or technology",
            "type": "string",
            "description": "A freelancermap skill tag slug, e.g. python-programming-language, sap-hana or amazon-web-services (mode=projectSearch/freelancerSearch). A full /projects/<slug> URL is also accepted.",
            "editor": "textfield",
            "default": "",
            "prefill": ""
          },
          "minDurationMonths": {
            "title": "Minimum project duration (months)",
            "type": "integer",
            "description": "Drop projects whose disclosed duration is shorter than this. Projects without a duration are kept (mode=projectSearch).",
            "minimum": 0,
            "maximum": 120
          },
          "language": {
            "title": "Spoken language",
            "type": "string",
            "description": "Only freelancers who list this language (mode=freelancerSearch).",
            "editor": "select",
            "enum": [
              "",
              "35",
              "33",
              "1",
              "30",
              "41",
              "40",
              "2",
              "3",
              "32",
              "23",
              "4",
              "13",
              "7",
              "6",
              "8",
              "37",
              "5",
              "9",
              "27",
              "10",
              "26",
              "11",
              "12",
              "39",
              "36",
              "28",
              "29",
              "14",
              "15",
              "16",
              "17",
              "18",
              "19",
              "31",
              "34",
              "21",
              "43",
              "22",
              "20",
              "38",
              "42",
              "24",
              "25"
            ],
            "enumTitles": [
              "Any language",
              "Albanian",
              "Amharic",
              "Arabic",
              "Bashkir",
              "Belarusian",
              "Bosnian",
              "Bulgarian",
              "Chinese",
              "Croatian",
              "Czech",
              "Danish",
              "Dutch",
              "English",
              "Finnish",
              "French",
              "Georgian",
              "German",
              "Greek",
              "Hebrew",
              "Hindi",
              "Hungarian",
              "Italian",
              "Japanese",
              "Korean",
              "Kurdish",
              "Latvian",
              "Lithuanian",
              "Norwegian",
              "Persian",
              "Polish",
              "Portuguese",
              "Romanian",
              "Russian",
              "Serbian",
              "Sinhala",
              "Slovak",
              "Slovenian",
              "Spanish",
              "Swedish",
              "Telugu",
              "Thai",
              "Turkish",
              "Ukrainian"
            ],
            "default": "",
            "prefill": ""
          },
          "maxHourlyRate": {
            "title": "Maximum hourly rate",
            "type": "integer",
            "description": "Only freelancers quoting at or below this hourly rate, in their own currency (mode=freelancerSearch).",
            "minimum": 1,
            "maximum": 2000
          },
          "maxDailyRate": {
            "title": "Maximum daily rate",
            "type": "integer",
            "description": "Only freelancers quoting at or below this daily rate, in their own currency (mode=freelancerSearch).",
            "minimum": 1,
            "maximum": 20000
          },
          "updatedWithinDays": {
            "title": "Profile updated within (days)",
            "type": "integer",
            "description": "Only freelancer profiles updated within this many days (mode=freelancerSearch).",
            "minimum": 1,
            "maximum": 365
          },
          "minAvailabilityPercent": {
            "title": "Minimum availability (%)",
            "type": "integer",
            "description": "Only freelancers who report at least this much availability (mode=freelancerSearch).",
            "minimum": 1,
            "maximum": 100
          },
          "hasAttachmentsOnly": {
            "title": "Only profiles with a CV or portfolio file",
            "type": "boolean",
            "description": "Only freelancers who uploaded a CV/portfolio attachment (mode=freelancerSearch).",
            "default": false,
            "prefill": false
          },
          "openToPermanentJobs": {
            "title": "Only freelancers open to permanent positions",
            "type": "boolean",
            "description": "Only freelancers open to permanent-position offers (mode=freelancerSearch).",
            "default": false,
            "prefill": false
          },
          "openToAgencyContract": {
            "title": "Only freelancers open to agency contracts",
            "type": "boolean",
            "description": "Only freelancers open to agency/employee-leasing contracts (mode=freelancerSearch).",
            "default": false,
            "prefill": false
          },
          "excludeUnavailable": {
            "title": "Exclude fully unavailable freelancers",
            "type": "boolean",
            "description": "Drop freelancers marked fully unavailable (mode=freelancerSearch).",
            "default": false,
            "prefill": false
          },
          "recentlyActiveOnly": {
            "title": "Only recently active profiles",
            "type": "boolean",
            "description": "Only freelancers whose profiles were updated recently (mode=freelancerSearch).",
            "default": false,
            "prefill": false
          },
          "requireDisplayedName": {
            "title": "Only freelancers with a public name",
            "type": "boolean",
            "description": "Skip profiles that hide the freelancer's name (mode=freelancerSearch).",
            "default": false,
            "prefill": false
          },
          "verifiedOnly": {
            "title": "Only verified profiles",
            "type": "boolean",
            "description": "Only profiles marked verified by freelancermap (mode=freelancerSearch/freelancerProfile).",
            "default": false,
            "prefill": false
          },
          "includeDetails": {
            "title": "Fetch full detail for each result",
            "type": "boolean",
            "description": "Enrich every search result with its detail page (full description, skills, budget, rate, history and contact block). Turn off for the fastest, cheapest runs (mode=projectSearch/freelancerSearch).",
            "default": true,
            "prefill": false
          },
          "projectSlugsOrUrls": {
            "title": "Project URLs or slugs",
            "type": "array",
            "description": "Project URLs or slugs to fetch (mode=projectDetail).",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "profileSlugsOrUrls": {
            "title": "Freelancer profile URLs or slugs",
            "type": "array",
            "description": "Freelancer profile URLs or slugs to fetch (mode=freelancerProfile).",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "minExperienceYears": {
            "title": "Minimum years of experience",
            "type": "integer",
            "description": "Drop freelancer profiles with fewer disclosed years of experience. Profiles without the field are kept (mode=freelancerProfile).",
            "minimum": 0,
            "maximum": 60
          },
          "availableOnly": {
            "title": "Only currently available freelancers",
            "type": "boolean",
            "description": "Only emit profiles marked fully available (mode=freelancerProfile).",
            "default": false,
            "prefill": false
          },
          "maxItems": {
            "title": "Maximum records",
            "type": "integer",
            "description": "Hard cap on emitted records. Search modes split each query across freelancermap's own filters instead of page numbers, so broad queries can return well over one results page.",
            "minimum": 1,
            "maximum": 1000,
            "default": 50,
            "prefill": 1
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Freelancermap Projects & Freelancer Profiles Output",
        "description": "Project and freelancer records with skills, budgets, rates, descriptions, history, contact blocks and source URLs.",
        "properties": {
          "listings": {
            "type": "string",
            "title": "Freelancermap listings",
            "description": "Dataset containing all scraped freelancermap projects and freelancer profiles.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Results",
              "transformation": {
                "fields": [
                  "title",
                  "name",
                  "headline",
                  "company",
                  "city",
                  "country",
                  "contractType",
                  "remoteType",
                  "rate",
                  "budgetAmount",
                  "sourceUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 1800,
        "memoryMbytes": 1024
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "639bbb1d77c132a73e053ee2d188d7fce80f49df486ffc134173be290d102263",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.005315555555555555
    }
  }
}