{
  "data": {
    "id": "m9SEVLoISWJhDLniO",
    "actId": "Pqd4W4qhGgUDHPaGH",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-04T09:46:08.057Z",
    "finishedAt": "2026-11-04T09:47:37.049Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 88916,
      "runTimeSecs": 88.916,
      "computeUnits": 0.09879555555555555,
      "imageSizeBytes": 5867084800
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Facebook Ad Library Byline & Advertiser Ad Finder Input\",\n  \"description\": \"Find Facebook Ad Library ads by advertiser Page, keyword, direct Ad Library ID, or \\\"Paid for by\\\" funding name. Returns creative text, media, run dates, platform placements, creative reuse, advertiser context, and political/EU spend, impression and reach data where Meta publishes it. No login, cookies or Meta API token required.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to scrape. Leave empty to process every target list you filled in (searchTerms, pageIds, adIds, bylines) in one run.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"search\",\n        \"byPage\",\n        \"byAdId\",\n        \"byByline\"\n      ],\n      \"enumTitles\": [\n        \"All provided targets (default)\",\n        \"Search by keyword\",\n        \"All ads from advertiser Pages\",\n        \"Lookup specific ads by Ad Library ID\",\n        \"Search by \\\"Paid for by\\\" name\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"search\"\n    },\n    \"searchTerms\": {\n      \"title\": \"Search Terms\",\n      \"type\": \"array\",\n      \"description\": \"Keywords to search for in the Ad Library, one search per term. Example: [\\\"coffee\\\", \\\"nike\\\"].\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": [\n        \"coffee\"\n      ],\n      \"default\": []\n    },\n    \"pageIds\": {\n      \"title\": \"Page IDs / Advertiser Search\",\n      \"type\": \"array\",\n      \"description\": \"Facebook Page IDs to fetch all ads from (numeric IDs, or URLs containing view_all_page_id= or profile.php?id=). Each page is searched separately.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"adIds\": {\n      \"title\": \"Direct Ad IDs\",\n      \"type\": \"array\",\n      \"description\": \"Ad Library IDs to fetch directly (numeric IDs or Ads Library URLs containing ?id=). All other filters are ignored in this mode.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"bylines\": {\n      \"title\": \"Search by \\\"Paid for by\\\" name\",\n      \"type\": \"array\",\n      \"description\": \"Funding-entity / committee names from the \\\"Paid for by\\\" disclaimer on political and issue ads. The actor tries the exact-cased name, retries the original casing, and re-checks each returned ad's byline client-side. Non-EU targets search the political & issue archive; EU/EEA targets use the all-ad-types EU DSA stream (the political archive returns zero there) and may return no byline match because Meta does not always expose it.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"country\": {\n      \"title\": \"Country\",\n      \"type\": \"string\",\n      \"description\": \"Country to search ads in, or ALL for every country. Ignored when the Countries multi-select below is set.\",\n      \"editor\": \"select\",\n      \"default\": \"ALL\",\n      \"enum\": [\n        \"ALL\",\n        \"AF\",\n        \"AL\",\n        \"DZ\",\n        \"AS\",\n        \"AD\",\n        \"AO\",\n        \"AI\",\n        \"AQ\",\n        \"AG\",\n        \"AR\",\n        \"AM\",\n        \"AW\",\n        \"AU\",\n        \"AT\",\n        \"AZ\",\n        \"BS\",\n        \"BH\",\n        \"BD\",\n        \"BB\",\n        \"BY\",\n        \"BE\",\n        \"BZ\",\n        \"BJ\",\n        \"BM\",\n        \"BT\",\n        \"BO\",\n        \"BA\",\n        \"BW\",\n        \"BR\",\n        \"BN\",\n        \"BG\",\n        \"BF\",\n        \"BI\",\n        \"KH\",\n        \"CM\",\n        \"CA\",\n        \"CV\",\n        \"KY\",\n        \"CF\",\n        \"TD\",\n        \"CL\",\n        \"CN\",\n        \"CO\",\n        \"KM\",\n        \"CG\",\n        \"CD\",\n        \"CR\",\n        \"HR\",\n        \"CU\",\n        \"CY\",\n        \"CZ\",\n        \"DK\",\n        \"DJ\",\n        \"DM\",\n        \"DO\",\n        \"EC\",\n        \"EG\",\n        \"SV\",\n        \"GQ\",\n        \"ER\",\n        \"EE\",\n        \"SZ\",\n        \"ET\",\n        \"FJ\",\n        \"FI\",\n        \"FR\",\n        \"GF\",\n        \"PF\",\n        \"GA\",\n        \"GM\",\n        \"GE\",\n        \"DE\",\n        \"GH\",\n        \"GI\",\n        \"GR\",\n        \"GL\",\n        \"GD\",\n        \"GP\",\n        \"GU\",\n        \"GT\",\n        \"GN\",\n        \"GW\",\n        \"GY\",\n        \"HT\",\n        \"HN\",\n        \"HK\",\n        \"HU\",\n        \"IS\",\n        \"IN\",\n        \"ID\",\n        \"IR\",\n        \"IQ\",\n        \"IE\",\n        \"IL\",\n        \"IT\",\n        \"JM\",\n        \"JP\",\n        \"JO\",\n        \"KZ\",\n        \"KE\",\n        \"KI\",\n        \"KW\",\n        \"KG\",\n        \"LA\",\n        \"LV\",\n        \"LB\",\n        \"LS\",\n        \"LR\",\n        \"LY\",\n        \"LI\",\n        \"LT\",\n        \"LU\",\n        \"MO\",\n        \"MG\",\n        \"MW\",\n        \"MY\",\n        \"MV\",\n        \"ML\",\n        \"MT\",\n        \"MH\",\n        \"MQ\",\n        \"MR\",\n        \"MU\",\n        \"MX\",\n        \"FM\",\n        \"MD\",\n        \"MC\",\n        \"MN\",\n        \"ME\",\n        \"MS\",\n        \"MA\",\n        \"MZ\",\n        \"MM\",\n        \"NA\",\n        \"NR\",\n        \"NP\",\n        \"NL\",\n        \"NC\",\n        \"NZ\",\n        \"NI\",\n        \"NE\",\n        \"NG\",\n        \"NU\",\n        \"MK\",\n        \"NO\",\n        \"OM\",\n        \"PK\",\n        \"PW\",\n        \"PS\",\n        \"PA\",\n        \"PG\",\n        \"PY\",\n        \"PE\",\n        \"PH\",\n        \"PL\",\n        \"PT\",\n        \"PR\",\n        \"QA\",\n        \"RO\",\n        \"RU\",\n        \"RW\",\n        \"WS\",\n        \"SM\",\n        \"ST\",\n        \"SA\",\n        \"SN\",\n        \"RS\",\n        \"SC\",\n        \"SL\",\n        \"SG\",\n        \"SK\",\n        \"SI\",\n        \"SB\",\n        \"SO\",\n        \"ZA\",\n        \"KR\",\n        \"SS\",\n        \"ES\",\n        \"LK\",\n        \"KN\",\n        \"LC\",\n        \"VC\",\n        \"SD\",\n        \"SR\",\n        \"SE\",\n        \"CH\",\n        \"SY\",\n        \"TW\",\n        \"TJ\",\n        \"TZ\",\n        \"TH\",\n        \"TL\",\n        \"TG\",\n        \"TO\",\n        \"TT\",\n        \"TN\",\n        \"TR\",\n        \"TM\",\n        \"TC\",\n        \"TV\",\n        \"UG\",\n        \"UA\",\n        \"AE\",\n        \"GB\",\n        \"US\",\n        \"UY\",\n        \"UZ\",\n        \"VU\",\n        \"VA\",\n        \"VE\",\n        \"VN\",\n        \"VG\",\n        \"VI\",\n        \"YE\",\n        \"ZM\",\n        \"ZW\"\n      ],\n      \"enumTitles\": [\n        \"All Countries\",\n        \"Afghanistan\",\n        \"Albania\",\n        \"Algeria\",\n        \"American Samoa\",\n        \"Andorra\",\n        \"Angola\",\n        \"Anguilla\",\n        \"Antarctica\",\n        \"Antigua and Barbuda\",\n        \"Argentina\",\n        \"Armenia\",\n        \"Aruba\",\n        \"Australia\",\n        \"Austria\",\n        \"Azerbaijan\",\n        \"Bahamas\",\n        \"Bahrain\",\n        \"Bangladesh\",\n        \"Barbados\",\n        \"Belarus\",\n        \"Belgium\",\n        \"Belize\",\n        \"Benin\",\n        \"Bermuda\",\n        \"Bhutan\",\n        \"Bolivia\",\n        \"Bosnia and Herzegovina\",\n        \"Botswana\",\n        \"Brazil\",\n        \"Brunei\",\n        \"Bulgaria\",\n        \"Burkina Faso\",\n        \"Burundi\",\n        \"Cambodia\",\n        \"Cameroon\",\n        \"Canada\",\n        \"Cape Verde\",\n        \"Cayman Islands\",\n        \"Central African Republic\",\n        \"Chad\",\n        \"Chile\",\n        \"China\",\n        \"Colombia\",\n        \"Comoros\",\n        \"Congo\",\n        \"Congo (DRC)\",\n        \"Costa Rica\",\n        \"Croatia\",\n        \"Cuba\",\n        \"Cyprus\",\n        \"Czechia\",\n        \"Denmark\",\n        \"Djibouti\",\n        \"Dominica\",\n        \"Dominican Republic\",\n        \"Ecuador\",\n        \"Egypt\",\n        \"El Salvador\",\n        \"Equatorial Guinea\",\n        \"Eritrea\",\n        \"Estonia\",\n        \"Eswatini\",\n        \"Ethiopia\",\n        \"Fiji\",\n        \"Finland\",\n        \"France\",\n        \"French Guiana\",\n        \"French Polynesia\",\n        \"Gabon\",\n        \"Gambia\",\n        \"Georgia\",\n        \"Germany\",\n        \"Ghana\",\n        \"Gibraltar\",\n        \"Greece\",\n        \"Greenland\",\n        \"Grenada\",\n        \"Guadeloupe\",\n        \"Guam\",\n        \"Guatemala\",\n        \"Guinea\",\n        \"Guinea-Bissau\",\n        \"Guyana\",\n        \"Haiti\",\n        \"Honduras\",\n        \"Hong Kong\",\n        \"Hungary\",\n        \"Iceland\",\n        \"India\",\n        \"Indonesia\",\n        \"Iran\",\n        \"Iraq\",\n        \"Ireland\",\n        \"Israel\",\n        \"Italy\",\n        \"Jamaica\",\n        \"Japan\",\n        \"Jordan\",\n        \"Kazakhstan\",\n        \"Kenya\",\n        \"Kiribati\",\n        \"Kuwait\",\n        \"Kyrgyzstan\",\n        \"Laos\",\n        \"Latvia\",\n        \"Lebanon\",\n        \"Lesotho\",\n        \"Liberia\",\n        \"Libya\",\n        \"Liechtenstein\",\n        \"Lithuania\",\n        \"Luxembourg\",\n        \"Macau\",\n        \"Madagascar\",\n        \"Malawi\",\n        \"Malaysia\",\n        \"Maldives\",\n        \"Mali\",\n        \"Malta\",\n        \"Marshall Islands\",\n        \"Martinique\",\n        \"Mauritania\",\n        \"Mauritius\",\n        \"Mexico\",\n        \"Micronesia\",\n        \"Moldova\",\n        \"Monaco\",\n        \"Mongolia\",\n        \"Montenegro\",\n        \"Montserrat\",\n        \"Morocco\",\n        \"Mozambique\",\n        \"Myanmar\",\n        \"Namibia\",\n        \"Nauru\",\n        \"Nepal\",\n        \"Netherlands\",\n        \"New Caledonia\",\n        \"New Zealand\",\n        \"Nicaragua\",\n        \"Niger\",\n        \"Nigeria\",\n        \"Niue\",\n        \"North Macedonia\",\n        \"Norway\",\n        \"Oman\",\n        \"Pakistan\",\n        \"Palau\",\n        \"Palestine\",\n        \"Panama\",\n        \"Papua New Guinea\",\n        \"Paraguay\",\n        \"Peru\",\n        \"Philippines\",\n        \"Poland\",\n        \"Portugal\",\n        \"Puerto Rico\",\n        \"Qatar\",\n        \"Romania\",\n        \"Russia\",\n        \"Rwanda\",\n        \"Samoa\",\n        \"San Marino\",\n        \"Sao Tome and Principe\",\n        \"Saudi Arabia\",\n        \"Senegal\",\n        \"Serbia\",\n        \"Seychelles\",\n        \"Sierra Leone\",\n        \"Singapore\",\n        \"Slovakia\",\n        \"Slovenia\",\n        \"Solomon Islands\",\n        \"Somalia\",\n        \"South Africa\",\n        \"South Korea\",\n        \"South Sudan\",\n        \"Spain\",\n        \"Sri Lanka\",\n        \"St. Kitts and Nevis\",\n        \"St. Lucia\",\n        \"St. Vincent and the Grenadines\",\n        \"Sudan\",\n        \"Suriname\",\n        \"Sweden\",\n        \"Switzerland\",\n        \"Syria\",\n        \"Taiwan\",\n        \"Tajikistan\",\n        \"Tanzania\",\n        \"Thailand\",\n        \"Timor-Leste\",\n        \"Togo\",\n        \"Tonga\",\n        \"Trinidad and Tobago\",\n        \"Tunisia\",\n        \"Turkiye\",\n        \"Turkmenistan\",\n        \"Turks and Caicos Islands\",\n        \"Tuvalu\",\n        \"Uganda\",\n        \"Ukraine\",\n        \"United Arab Emirates\",\n        \"United Kingdom\",\n        \"United States\",\n        \"Uruguay\",\n        \"Uzbekistan\",\n        \"Vanuatu\",\n        \"Vatican City\",\n        \"Venezuela\",\n        \"Vietnam\",\n        \"British Virgin Islands\",\n        \"U.S. Virgin Islands\",\n        \"Yemen\",\n        \"Zambia\",\n        \"Zimbabwe\"\n      ]\n    },\n    \"countries\": {\n      \"title\": \"Countries (multi-select)\",\n      \"type\": \"array\",\n      \"description\": \"One or more country codes, searched together as a union (unlike the single Country field). Takes precedence over Country when set.\",\n      \"editor\": \"select\",\n      \"uniqueItems\": true,\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"ALL\",\n          \"AF\",\n          \"AL\",\n          \"DZ\",\n          \"AS\",\n          \"AD\",\n          \"AO\",\n          \"AI\",\n          \"AQ\",\n          \"AG\",\n          \"AR\",\n          \"AM\",\n          \"AW\",\n          \"AU\",\n          \"AT\",\n          \"AZ\",\n          \"BS\",\n          \"BH\",\n          \"BD\",\n          \"BB\",\n          \"BY\",\n          \"BE\",\n          \"BZ\",\n          \"BJ\",\n          \"BM\",\n          \"BT\",\n          \"BO\",\n          \"BA\",\n          \"BW\",\n          \"BR\",\n          \"BN\",\n          \"BG\",\n          \"BF\",\n          \"BI\",\n          \"KH\",\n          \"CM\",\n          \"CA\",\n          \"CV\",\n          \"KY\",\n          \"CF\",\n          \"TD\",\n          \"CL\",\n          \"CN\",\n          \"CO\",\n          \"KM\",\n          \"CG\",\n          \"CD\",\n          \"CR\",\n          \"HR\",\n          \"CU\",\n          \"CY\",\n          \"CZ\",\n          \"DK\",\n          \"DJ\",\n          \"DM\",\n          \"DO\",\n          \"EC\",\n          \"EG\",\n          \"SV\",\n          \"GQ\",\n          \"ER\",\n          \"EE\",\n          \"SZ\",\n          \"ET\",\n          \"FJ\",\n          \"FI\",\n          \"FR\",\n          \"GF\",\n          \"PF\",\n          \"GA\",\n          \"GM\",\n          \"GE\",\n          \"DE\",\n          \"GH\",\n          \"GI\",\n          \"GR\",\n          \"GL\",\n          \"GD\",\n          \"GP\",\n          \"GU\",\n          \"GT\",\n          \"GN\",\n          \"GW\",\n          \"GY\",\n          \"HT\",\n          \"HN\",\n          \"HK\",\n          \"HU\",\n          \"IS\",\n          \"IN\",\n          \"ID\",\n          \"IR\",\n          \"IQ\",\n          \"IE\",\n          \"IL\",\n          \"IT\",\n          \"JM\",\n          \"JP\",\n          \"JO\",\n          \"KZ\",\n          \"KE\",\n          \"KI\",\n          \"KW\",\n          \"KG\",\n          \"LA\",\n          \"LV\",\n          \"LB\",\n          \"LS\",\n          \"LR\",\n          \"LY\",\n          \"LI\",\n          \"LT\",\n          \"LU\",\n          \"MO\",\n          \"MG\",\n          \"MW\",\n          \"MY\",\n          \"MV\",\n          \"ML\",\n          \"MT\",\n          \"MH\",\n          \"MQ\",\n          \"MR\",\n          \"MU\",\n          \"MX\",\n          \"FM\",\n          \"MD\",\n          \"MC\",\n          \"MN\",\n          \"ME\",\n          \"MS\",\n          \"MA\",\n          \"MZ\",\n          \"MM\",\n          \"NA\",\n          \"NR\",\n          \"NP\",\n          \"NL\",\n          \"NC\",\n          \"NZ\",\n          \"NI\",\n          \"NE\",\n          \"NG\",\n          \"NU\",\n          \"MK\",\n          \"NO\",\n          \"OM\",\n          \"PK\",\n          \"PW\",\n          \"PS\",\n          \"PA\",\n          \"PG\",\n          \"PY\",\n          \"PE\",\n          \"PH\",\n          \"PL\",\n          \"PT\",\n          \"PR\",\n          \"QA\",\n          \"RO\",\n          \"RU\",\n          \"RW\",\n          \"WS\",\n          \"SM\",\n          \"ST\",\n          \"SA\",\n          \"SN\",\n          \"RS\",\n          \"SC\",\n          \"SL\",\n          \"SG\",\n          \"SK\",\n          \"SI\",\n          \"SB\",\n          \"SO\",\n          \"ZA\",\n          \"KR\",\n          \"SS\",\n          \"ES\",\n          \"LK\",\n          \"KN\",\n          \"LC\",\n          \"VC\",\n          \"SD\",\n          \"SR\",\n          \"SE\",\n          \"CH\",\n          \"SY\",\n          \"TW\",\n          \"TJ\",\n          \"TZ\",\n          \"TH\",\n          \"TL\",\n          \"TG\",\n          \"TO\",\n          \"TT\",\n          \"TN\",\n          \"TR\",\n          \"TM\",\n          \"TC\",\n          \"TV\",\n          \"UG\",\n          \"UA\",\n          \"AE\",\n          \"GB\",\n          \"US\",\n          \"UY\",\n          \"UZ\",\n          \"VU\",\n          \"VA\",\n          \"VE\",\n          \"VN\",\n          \"VG\",\n          \"VI\",\n          \"YE\",\n          \"ZM\",\n          \"ZW\"\n        ],\n        \"enumTitles\": [\n          \"All Countries\",\n          \"Afghanistan\",\n          \"Albania\",\n          \"Algeria\",\n          \"American Samoa\",\n          \"Andorra\",\n          \"Angola\",\n          \"Anguilla\",\n          \"Antarctica\",\n          \"Antigua and Barbuda\",\n          \"Argentina\",\n          \"Armenia\",\n          \"Aruba\",\n          \"Australia\",\n          \"Austria\",\n          \"Azerbaijan\",\n          \"Bahamas\",\n          \"Bahrain\",\n          \"Bangladesh\",\n          \"Barbados\",\n          \"Belarus\",\n          \"Belgium\",\n          \"Belize\",\n          \"Benin\",\n          \"Bermuda\",\n          \"Bhutan\",\n          \"Bolivia\",\n          \"Bosnia and Herzegovina\",\n          \"Botswana\",\n          \"Brazil\",\n          \"Brunei\",\n          \"Bulgaria\",\n          \"Burkina Faso\",\n          \"Burundi\",\n          \"Cambodia\",\n          \"Cameroon\",\n          \"Canada\",\n          \"Cape Verde\",\n          \"Cayman Islands\",\n          \"Central African Republic\",\n          \"Chad\",\n          \"Chile\",\n          \"China\",\n          \"Colombia\",\n          \"Comoros\",\n          \"Congo\",\n          \"Congo (DRC)\",\n          \"Costa Rica\",\n          \"Croatia\",\n          \"Cuba\",\n          \"Cyprus\",\n          \"Czechia\",\n          \"Denmark\",\n          \"Djibouti\",\n          \"Dominica\",\n          \"Dominican Republic\",\n          \"Ecuador\",\n          \"Egypt\",\n          \"El Salvador\",\n          \"Equatorial Guinea\",\n          \"Eritrea\",\n          \"Estonia\",\n          \"Eswatini\",\n          \"Ethiopia\",\n          \"Fiji\",\n          \"Finland\",\n          \"France\",\n          \"French Guiana\",\n          \"French Polynesia\",\n          \"Gabon\",\n          \"Gambia\",\n          \"Georgia\",\n          \"Germany\",\n          \"Ghana\",\n          \"Gibraltar\",\n          \"Greece\",\n          \"Greenland\",\n          \"Grenada\",\n          \"Guadeloupe\",\n          \"Guam\",\n          \"Guatemala\",\n          \"Guinea\",\n          \"Guinea-Bissau\",\n          \"Guyana\",\n          \"Haiti\",\n          \"Honduras\",\n          \"Hong Kong\",\n          \"Hungary\",\n          \"Iceland\",\n          \"India\",\n          \"Indonesia\",\n          \"Iran\",\n          \"Iraq\",\n          \"Ireland\",\n          \"Israel\",\n          \"Italy\",\n          \"Jamaica\",\n          \"Japan\",\n          \"Jordan\",\n          \"Kazakhstan\",\n          \"Kenya\",\n          \"Kiribati\",\n          \"Kuwait\",\n          \"Kyrgyzstan\",\n          \"Laos\",\n          \"Latvia\",\n          \"Lebanon\",\n          \"Lesotho\",\n          \"Liberia\",\n          \"Libya\",\n          \"Liechtenstein\",\n          \"Lithuania\",\n          \"Luxembourg\",\n          \"Macau\",\n          \"Madagascar\",\n          \"Malawi\",\n          \"Malaysia\",\n          \"Maldives\",\n          \"Mali\",\n          \"Malta\",\n          \"Marshall Islands\",\n          \"Martinique\",\n          \"Mauritania\",\n          \"Mauritius\",\n          \"Mexico\",\n          \"Micronesia\",\n          \"Moldova\",\n          \"Monaco\",\n          \"Mongolia\",\n          \"Montenegro\",\n          \"Montserrat\",\n          \"Morocco\",\n          \"Mozambique\",\n          \"Myanmar\",\n          \"Namibia\",\n          \"Nauru\",\n          \"Nepal\",\n          \"Netherlands\",\n          \"New Caledonia\",\n          \"New Zealand\",\n          \"Nicaragua\",\n          \"Niger\",\n          \"Nigeria\",\n          \"Niue\",\n          \"North Macedonia\",\n          \"Norway\",\n          \"Oman\",\n          \"Pakistan\",\n          \"Palau\",\n          \"Palestine\",\n          \"Panama\",\n          \"Papua New Guinea\",\n          \"Paraguay\",\n          \"Peru\",\n          \"Philippines\",\n          \"Poland\",\n          \"Portugal\",\n          \"Puerto Rico\",\n          \"Qatar\",\n          \"Romania\",\n          \"Russia\",\n          \"Rwanda\",\n          \"Samoa\",\n          \"San Marino\",\n          \"Sao Tome and Principe\",\n          \"Saudi Arabia\",\n          \"Senegal\",\n          \"Serbia\",\n          \"Seychelles\",\n          \"Sierra Leone\",\n          \"Singapore\",\n          \"Slovakia\",\n          \"Slovenia\",\n          \"Solomon Islands\",\n          \"Somalia\",\n          \"South Africa\",\n          \"South Korea\",\n          \"South Sudan\",\n          \"Spain\",\n          \"Sri Lanka\",\n          \"St. Kitts and Nevis\",\n          \"St. Lucia\",\n          \"St. Vincent and the Grenadines\",\n          \"Sudan\",\n          \"Suriname\",\n          \"Sweden\",\n          \"Switzerland\",\n          \"Syria\",\n          \"Taiwan\",\n          \"Tajikistan\",\n          \"Tanzania\",\n          \"Thailand\",\n          \"Timor-Leste\",\n          \"Togo\",\n          \"Tonga\",\n          \"Trinidad and Tobago\",\n          \"Tunisia\",\n          \"Turkiye\",\n          \"Turkmenistan\",\n          \"Turks and Caicos Islands\",\n          \"Tuvalu\",\n          \"Uganda\",\n          \"Ukraine\",\n          \"United Arab Emirates\",\n          \"United Kingdom\",\n          \"United States\",\n          \"Uruguay\",\n          \"Uzbekistan\",\n          \"Vanuatu\",\n          \"Vatican City\",\n          \"Venezuela\",\n          \"Vietnam\",\n          \"British Virgin Islands\",\n          \"U.S. Virgin Islands\",\n          \"Yemen\",\n          \"Zambia\",\n          \"Zimbabwe\"\n        ]\n      },\n      \"default\": []\n    },\n    \"adActiveStatus\": {\n      \"title\": \"Ad Status\",\n      \"type\": \"string\",\n      \"description\": \"Filter by ad active status.\",\n      \"default\": \"active\",\n      \"prefill\": \"active\",\n      \"enum\": [\n        \"all\",\n        \"active\",\n        \"inactive\"\n      ],\n      \"enumTitles\": [\n        \"All Ads\",\n        \"Active Only\",\n        \"Inactive Only\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"adType\": {\n      \"title\": \"Ad Type\",\n      \"type\": \"string\",\n      \"description\": \"Filter by ad category. Note: the political-and-issue archive excludes EU/EEA countries, so EU political searches automatically use All Types (EU transparency stream).\",\n      \"default\": \"all\",\n      \"prefill\": \"all\",\n      \"enum\": [\n        \"all\",\n        \"political_and_issue_ads\",\n        \"housing\",\n        \"employment\",\n        \"credit\"\n      ],\n      \"enumTitles\": [\n        \"All Types\",\n        \"Political & Issue Ads\",\n        \"Housing\",\n        \"Employment\",\n        \"Credit\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"mediaType\": {\n      \"title\": \"Media Type\",\n      \"type\": \"string\",\n      \"description\": \"Filter by the ad's creative media type. `meme` is applied server-side only; Meta's payload has no meme marker, so output `media_type` is always image, video or none.\",\n      \"default\": \"all\",\n      \"prefill\": \"all\",\n      \"enum\": [\n        \"all\",\n        \"image\",\n        \"video\",\n        \"meme\",\n        \"none\"\n      ],\n      \"enumTitles\": [\n        \"All Media\",\n        \"Image\",\n        \"Video\",\n        \"Meme\",\n        \"No Media\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"publisherPlatforms\": {\n      \"title\": \"Publisher Platforms\",\n      \"type\": \"array\",\n      \"description\": \"Only return ads shown on these platforms. Leave empty for all platforms.\",\n      \"editor\": \"select\",\n      \"uniqueItems\": true,\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"FACEBOOK\",\n          \"INSTAGRAM\",\n          \"MESSENGER\",\n          \"AUDIENCE_NETWORK\",\n          \"WHATSAPP\",\n          \"THREADS\"\n        ],\n        \"enumTitles\": [\n          \"Facebook\",\n          \"Instagram\",\n          \"Messenger\",\n          \"Audience Network\",\n          \"WhatsApp\",\n          \"Threads\"\n        ]\n      },\n      \"default\": []\n    },\n    \"contentLanguages\": {\n      \"title\": \"Ad Content Languages\",\n      \"type\": \"array\",\n      \"description\": \"Only return ads whose creative is written in one of these languages. 2-letter ISO 639-1 codes; leave empty for every language.\",\n      \"editor\": \"select\",\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"aa\",\n          \"ab\",\n          \"ae\",\n          \"af\",\n          \"ak\",\n          \"am\",\n          \"an\",\n          \"ar\",\n          \"as\",\n          \"av\",\n          \"ay\",\n          \"az\",\n          \"ba\",\n          \"be\",\n          \"bg\",\n          \"bi\",\n          \"bm\",\n          \"bn\",\n          \"bo\",\n          \"br\",\n          \"bs\",\n          \"ca\",\n          \"ce\",\n          \"ch\",\n          \"co\",\n          \"cr\",\n          \"cs\",\n          \"cu\",\n          \"cv\",\n          \"cy\",\n          \"da\",\n          \"de\",\n          \"dv\",\n          \"dz\",\n          \"ee\",\n          \"el\",\n          \"en\",\n          \"eo\",\n          \"es\",\n          \"et\",\n          \"eu\",\n          \"fa\",\n          \"ff\",\n          \"fi\",\n          \"fj\",\n          \"fo\",\n          \"fr\",\n          \"fy\",\n          \"ga\",\n          \"gd\",\n          \"gl\",\n          \"gn\",\n          \"gu\",\n          \"gv\",\n          \"ha\",\n          \"he\",\n          \"hi\",\n          \"ho\",\n          \"hr\",\n          \"ht\",\n          \"hu\",\n          \"hy\",\n          \"hz\",\n          \"ia\",\n          \"id\",\n          \"ie\",\n          \"ig\",\n          \"ii\",\n          \"ik\",\n          \"io\",\n          \"is\",\n          \"it\",\n          \"iu\",\n          \"ja\",\n          \"jv\",\n          \"ka\",\n          \"kg\",\n          \"ki\",\n          \"kj\",\n          \"kk\",\n          \"kl\",\n          \"km\",\n          \"kn\",\n          \"ko\",\n          \"kr\",\n          \"ks\",\n          \"ku\",\n          \"kv\",\n          \"kw\",\n          \"ky\",\n          \"la\",\n          \"lb\",\n          \"lg\",\n          \"li\",\n          \"ln\",\n          \"lo\",\n          \"lt\",\n          \"lu\",\n          \"lv\",\n          \"mg\",\n          \"mh\",\n          \"mi\",\n          \"mk\",\n          \"ml\",\n          \"mn\",\n          \"mr\",\n          \"ms\",\n          \"mt\",\n          \"my\",\n          \"na\",\n          \"nb\",\n          \"nd\",\n          \"ne\",\n          \"ng\",\n          \"nl\",\n          \"nn\",\n          \"no\",\n          \"nr\",\n          \"nv\",\n          \"ny\",\n          \"oc\",\n          \"oj\",\n          \"om\",\n          \"or\",\n          \"os\",\n          \"pa\",\n          \"pi\",\n          \"pl\",\n          \"ps\",\n          \"pt\",\n          \"qu\",\n          \"rm\",\n          \"rn\",\n          \"ro\",\n          \"ru\",\n          \"rw\",\n          \"sa\",\n          \"sc\",\n          \"sd\",\n          \"se\",\n          \"sg\",\n          \"si\",\n          \"sk\",\n          \"sl\",\n          \"sm\",\n          \"sn\",\n          \"so\",\n          \"sq\",\n          \"sr\",\n          \"ss\",\n          \"st\",\n          \"su\",\n          \"sv\",\n          \"sw\",\n          \"ta\",\n          \"te\",\n          \"tg\",\n          \"th\",\n          \"ti\",\n          \"tk\",\n          \"tl\",\n          \"tn\",\n          \"to\",\n          \"tr\",\n          \"ts\",\n          \"tt\",\n          \"tw\",\n          \"ty\",\n          \"ug\",\n          \"uk\",\n          \"ur\",\n          \"uz\",\n          \"ve\",\n          \"vi\",\n          \"vo\",\n          \"wa\",\n          \"wo\",\n          \"xh\",\n          \"yi\",\n          \"yo\",\n          \"za\",\n          \"zh\",\n          \"zu\"\n        ],\n        \"enumTitles\": [\n          \"Afar\",\n          \"Abkhazian\",\n          \"Avestan\",\n          \"Afrikaans\",\n          \"Akan\",\n          \"Amharic\",\n          \"Aragonese\",\n          \"Arabic\",\n          \"Assamese\",\n          \"Avaric\",\n          \"Aymara\",\n          \"Azerbaijani\",\n          \"Bashkir\",\n          \"Belarusian\",\n          \"Bulgarian\",\n          \"Bislama\",\n          \"Bambara\",\n          \"Bengali\",\n          \"Tibetan\",\n          \"Breton\",\n          \"Bosnian\",\n          \"Catalan\",\n          \"Chechen\",\n          \"Chamorro\",\n          \"Corsican\",\n          \"Cree\",\n          \"Czech\",\n          \"Church Slavic\",\n          \"Chuvash\",\n          \"Welsh\",\n          \"Danish\",\n          \"German\",\n          \"Divehi\",\n          \"Dzongkha\",\n          \"Ewe\",\n          \"Greek\",\n          \"English\",\n          \"Esperanto\",\n          \"Spanish\",\n          \"Estonian\",\n          \"Basque\",\n          \"Persian\",\n          \"Fulah\",\n          \"Finnish\",\n          \"Fijian\",\n          \"Faroese\",\n          \"French\",\n          \"Western Frisian\",\n          \"Irish\",\n          \"Scottish Gaelic\",\n          \"Galician\",\n          \"Guarani\",\n          \"Gujarati\",\n          \"Manx\",\n          \"Hausa\",\n          \"Hebrew\",\n          \"Hindi\",\n          \"Hiri Motu\",\n          \"Croatian\",\n          \"Haitian Creole\",\n          \"Hungarian\",\n          \"Armenian\",\n          \"Herero\",\n          \"Interlingua\",\n          \"Indonesian\",\n          \"Interlingue\",\n          \"Igbo\",\n          \"Sichuan Yi\",\n          \"Inupiaq\",\n          \"Ido\",\n          \"Icelandic\",\n          \"Italian\",\n          \"Inuktitut\",\n          \"Japanese\",\n          \"Javanese\",\n          \"Georgian\",\n          \"Kongo\",\n          \"Kikuyu\",\n          \"Kuanyama\",\n          \"Kazakh\",\n          \"Kalaallisut\",\n          \"Khmer\",\n          \"Kannada\",\n          \"Korean\",\n          \"Kanuri\",\n          \"Kashmiri\",\n          \"Kurdish\",\n          \"Komi\",\n          \"Cornish\",\n          \"Kyrgyz\",\n          \"Latin\",\n          \"Luxembourgish\",\n          \"Ganda\",\n          \"Limburgish\",\n          \"Lingala\",\n          \"Lao\",\n          \"Lithuanian\",\n          \"Luba-Katanga\",\n          \"Latvian\",\n          \"Malagasy\",\n          \"Marshallese\",\n          \"Maori\",\n          \"Macedonian\",\n          \"Malayalam\",\n          \"Mongolian\",\n          \"Marathi\",\n          \"Malay\",\n          \"Maltese\",\n          \"Burmese\",\n          \"Nauru\",\n          \"Norwegian Bokmal\",\n          \"North Ndebele\",\n          \"Nepali\",\n          \"Ndonga\",\n          \"Dutch\",\n          \"Norwegian Nynorsk\",\n          \"Norwegian\",\n          \"South Ndebele\",\n          \"Navajo\",\n          \"Chichewa\",\n          \"Occitan\",\n          \"Ojibwa\",\n          \"Oromo\",\n          \"Oriya\",\n          \"Ossetian\",\n          \"Punjabi\",\n          \"Pali\",\n          \"Polish\",\n          \"Pashto\",\n          \"Portuguese\",\n          \"Quechua\",\n          \"Romansh\",\n          \"Rundi\",\n          \"Romanian\",\n          \"Russian\",\n          \"Kinyarwanda\",\n          \"Sanskrit\",\n          \"Sardinian\",\n          \"Sindhi\",\n          \"Northern Sami\",\n          \"Sango\",\n          \"Sinhala\",\n          \"Slovak\",\n          \"Slovenian\",\n          \"Samoan\",\n          \"Shona\",\n          \"Somali\",\n          \"Albanian\",\n          \"Serbian\",\n          \"Swati\",\n          \"Southern Sotho\",\n          \"Sundanese\",\n          \"Swedish\",\n          \"Swahili\",\n          \"Tamil\",\n          \"Telugu\",\n          \"Tajik\",\n          \"Thai\",\n          \"Tigrinya\",\n          \"Turkmen\",\n          \"Tagalog\",\n          \"Tswana\",\n          \"Tonga\",\n          \"Turkish\",\n          \"Tsonga\",\n          \"Tatar\",\n          \"Twi\",\n          \"Tahitian\",\n          \"Uyghur\",\n          \"Ukrainian\",\n          \"Urdu\",\n          \"Uzbek\",\n          \"Venda\",\n          \"Vietnamese\",\n          \"Volapuk\",\n          \"Walloon\",\n          \"Wolof\",\n          \"Xhosa\",\n          \"Yiddish\",\n          \"Yoruba\",\n          \"Zhuang\",\n          \"Chinese\",\n          \"Zulu\"\n        ]\n      }\n    },\n    \"searchType\": {\n      \"title\": \"Keyword Match\",\n      \"type\": \"string\",\n      \"description\": \"How keyword search terms are matched (mode=search only).\",\n      \"default\": \"keyword_unordered\",\n      \"prefill\": \"keyword_unordered\",\n      \"enum\": [\n        \"keyword_unordered\",\n        \"keyword_exact_phrase\"\n      ],\n      \"enumTitles\": [\n        \"Any order (default)\",\n        \"Exact phrase\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"startDate\": {\n      \"title\": \"Start Date\",\n      \"type\": \"string\",\n      \"description\": \"Only include ads that had impressions on or after this date (YYYY-MM-DD). Combined with End Date it forms a delivery window.\",\n      \"editor\": \"datepicker\"\n    },\n    \"endDate\": {\n      \"title\": \"End Date\",\n      \"type\": \"string\",\n      \"description\": \"Only include ads that had impressions on or before this date (YYYY-MM-DD).\",\n      \"editor\": \"datepicker\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort By\",\n      \"type\": \"string\",\n      \"description\": \"Order results by relevance (Facebook's default) or by total impressions.\",\n      \"default\": \"relevance\",\n      \"prefill\": \"relevance\",\n      \"enum\": [\n        \"relevance\",\n        \"total_impressions\"\n      ],\n      \"enumTitles\": [\n        \"Relevance (default)\",\n        \"Total Impressions\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"resultsPerSearch\": {\n      \"title\": \"Results Per Search Term\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of ads to extract per search term / page / ad / byline.\",\n      \"default\": 50,\n      \"minimum\": 1,\n      \"maximum\": 100000,\n      \"prefill\": 3\n    },\n    \"maxItems\": {\n      \"title\": \"Max Ads (global)\",\n      \"type\": \"integer\",\n      \"description\": \"Stop the whole run after this many ads, across all search targets.\",\n      \"default\": 1000,\n      \"minimum\": 1,\n      \"maximum\": 100000,\n      \"prefill\": 3\n    },\n    \"includeEuDetails\": {\n      \"title\": \"Include EU Transparency & Advertiser Details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch per-ad detail data: EU total reach, age/country/gender reach breakdown, targeting, payer/beneficiary, advertiser Instagram profile and page About. Adds one extra request per ad.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"rehostMedia\": {\n      \"title\": \"Rehost Media URLs\",\n      \"type\": \"boolean\",\n      \"description\": \"Copy each ad's primary media (up to 15 MB) into this run's key-value store and output the permanent URL (Facebook's own media URLs expire after a few days). The original signed URL is kept in media_url_original; media_rehost_status records rehosted/disabled/too_large/download_failed/kv_failed. Arrays, carousel cards and Page profile/cover URLs stay signed.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"onlyTotal\": {\n      \"title\": \"Only Total Results\",\n      \"type\": \"boolean\",\n      \"description\": \"Skip ad scraping and return one total per search target per country (one lightweight page request per country, no browser). Counts respect the keyword, country, status, ad type, media type and date window; Facebook caps displayed totals at 50,001 (50,000+). Not available for byline or direct ad-ID targets, which get an unsupported_total diagnostic.\",\n      \"default\": false,\n      \"prefill\": false\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Facebook Ad Library Byline & Advertiser Ad Finder\n\nLook up who is advertising and what they are running. This actor reads Meta's public Facebook Ad Library without a login, a cookie, or a Meta API token. Start from an advertiser Page, a specific Ad Library ID, a free-text keyword, or the \"Paid for by\" name printed on a political disclaimer, and get one clean record per ad with its creative, media, run window, placements, creative-reuse count, advertiser context, and - when Meta publishes them for political or EU-regulated ads - spend, impressions and reach.\n\n## What this actor does\n\n- **Four lookup paths in one run:** keyword search, advertiser Page (numeric ID or URL), direct Ad Library ID, and \"Paid for by\" byline. Fill in one list or several; a single run processes them all.\n- **Real request-side filters:** country (single or multi-country union), content language, active/inactive status, ad category, media type, publisher platform, keyword match mode, delivery-date window and sort order.\n- **Creative in full:** ad body, title, caption, description, call-to-action, destination link, single image/video URLs, video previews, carousel cards and dynamic-creative placeholder tokens.\n- **Advertiser context:** Page name and ID, Page likes, categories, profile picture and page URL, plus optional per-ad detail data such as page About text, Instagram handle and followers.\n- **Political and EU transparency:** spend and impression ranges, byline, disclaimer label, payer/beneficiary, EU total reach, age/gender/location targeting and reach breakdowns.\n- **Honest by design:** spend, impressions and reach appear only where Meta actually discloses them. Commercial ads never get a guessed number; the field is simply absent. Every empty field is dropped from the record.\n- **Cookieless and setup-free:** no cookies, no login, no API key, and no proxy configuration. The actor manages its own connection automatically.\n\n## Output per ad\n\nEvery record carries `ad_id` (Ad Library archive ID), `ad_snapshot_url` and `sourceUrl` (the ad's public permalink), `recordType: \"ad\"`, `scraped_at` and `scrapedAt`.\n\n**Identity and advertiser**\n\n- `page_id`, `page_name`, `page_url`, `page_profile_uri`, `page_profile_picture_url`\n- `page_like_count`, `page_categories`, `page_is_deleted`, `page_is_restricted`, `page_verification`, `page_alias`, `page_cover_photo_url`\n- `advertiser_about`, `advertiser_page_category`, `advertiser_ig_username`, `advertiser_ig_followers`, `advertiser_ig_verified`, `entity_type`, `page_spend`\n\n**Creative**\n\n- `ad_text`, `title`, `caption`, `link_description`, `cta_text`, `cta_type`, `display_format`\n- `link_url` - the destination the ad sends clicks to\n- `media_type` - `image`, `video` or `none` (derived from the creative). The `mediaType=meme` input is a server-side filter; Meta's payload has no meme marker, so the output never invents `meme`.\n- `media_url` - primary creative. With `rehostMedia`, a successful copy is in `media_url`, the signed original in `media_url_original`/`media_url_original_expires_at`, and `media_rehost_status` says `rehosted`; `media_url_expires_at` is present only while `media_url` itself is a signed fbcdn URL (rehost off/failed). Failure values are `disabled`, `too_large`, `download_failed` and `kv_failed`, with `media_rehost_reason`.\n- `image_urls[]`, `video_urls[]`, `video_preview_urls[]`\n- `cards[]` - carousel cards with `title`, `body`, `caption`, `linkUrl`, `ctaText`, `ctaType`, `imageUrl`, `videoUrls`, `videoPreviewUrl`\n- `template_tokens[]`, `template_body`, `template_title`, `resolved_ad_text`, `resolved_title` - dynamic-creative (DCO/DPA) placeholders and any token-free card variant\n\n**Delivery**\n\n- `start_date`, `end_date` - `YYYY-MM-DD`\n- `days_running` - days between start and end (or today for active ads)\n- `status` - `active` or `inactive`; omitted together with `is_active` when Meta does not send a boolean (no `unknown` sentinel)\n- `publisher_platform[]` - e.g. `FACEBOOK`, `INSTAGRAM`, `MESSENGER`, `AUDIENCE_NETWORK`\n- `collation_count`, `collation_id` - Meta's creative-reuse group and count\n- `categories[]`, `gated_type`, `is_aaa_eligible`, `contains_digital_created_media`, `contains_sensitive_content`, `has_user_reported`, `hide_data_status`, `regional_regulation_data`\n\n**Political and EU transparency (only when Meta publishes it)**\n\n- `spend`, `spend_lower_bound`, `spend_upper_bound`, `currency`\n- `impressions`, `impressions_index`, `impressions_lower_bound`, `impressions_upper_bound`\n- `reach_estimate`, `reach_lower_bound`, `reach_upper_bound`\n- `byline`, `disclaimer_label`\n- `eu_total_reach`, `uk_total_reach`, `br_total_reach`\n- `target_age_audience`, `target_gender_audience`, `target_location_audience`\n- `age_country_gender_reach_breakdown`, `audience_age_gender`, `audience_location`, `audience_single_country`\n- `payer_beneficiary[]`, `violation_types[]`, `is_violating_eu_siep`\n\nWhen `onlyTotal` is on, the dataset contains one summary record per target **per country** instead: `type: \"facebook_ads_library_total\"`, `recordType: \"total\"`, `search_term`, `country`, `total_results`, `scraped_at`. Totals are not available for byline or direct ad-ID targets because the Ad Library page has no byline filter and an ad page has no search result list; those targets get an `unsupported_total` diagnostic.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `\"\"` | `\"\"` processes every provided target list; or choose `search`, `byPage`, `byAdId`, `byByline` |\n| `searchTerms` | array | `[]` | Keywords to search, one query per term. Prefill: `[\"coffee\"]` |\n| `pageIds` | array | `[]` | Facebook Page IDs, or URLs containing `view_all_page_id=` / `profile.php?id=` |\n| `adIds` | array | `[]` | Ad Library IDs, or ads-library URLs containing `?id=` |\n| `bylines` | array | `[]` | Funding-entity names from a political ad's \"Paid for by\" disclaimer. Non-EU targets use the political archive; EU/EEA targets use the all-types EU DSA stream and a client-side byline check |\n| `country` | string | `ALL` | Single ISO 3166-1 alpha-2 country, or `ALL` |\n| `countries` | array | `[]` | Multiple country codes, searched as a union. Takes precedence over `country` |\n| `adActiveStatus` | string | `active` | `all`, `active` or `inactive` |\n| `adType` | string | `all` | `all`, `political_and_issue_ads`, `housing`, `employment` or `credit` |\n| `mediaType` | string | `all` | `all`, `image`, `video`, `meme` or `none`. `meme` is a server-side filter only; output `media_type` stays `image`/`video`/`none` |\n| `publisherPlatforms` | array | `[]` | Only ads shown on Facebook, Instagram, Messenger, Audience Network, WhatsApp or Threads |\n| `contentLanguages` | array | `[]` | 2-letter ISO 639-1 creative languages (full list in the dropdown) |\n| `searchType` | string | `keyword_unordered` | `keyword_unordered` or `keyword_exact_phrase` |\n| `startDate` | string | - | Include ads with delivery on or after this date (`YYYY-MM-DD`) |\n| `endDate` | string | - | Include ads with delivery on or before this date (`YYYY-MM-DD`) |\n| `sortBy` | string | `relevance` | `relevance` or `total_impressions` |\n| `resultsPerSearch` | integer | `50` | Cap per target (1-100000). Prefill: `3` |\n| `maxItems` | integer | `1000` | Cap for the whole run across all targets (1-100000). Prefill: `3` |\n| `includeEuDetails` | boolean | `true` | Fetch per-ad EU transparency and advertiser-profile detail. Adds one request per ad. Prefill: `false` |\n| `rehostMedia` | boolean | `true` | Copy the primary media (max 15 MB) into the run's key-value store and emit a permanent URL. `media_rehost_status` records success/failure; arrays, carousel cards and Page profile/cover URLs stay signed. Prefill: `false` |\n| `onlyTotal` | boolean | `false` | Skip ad records and return one result count per target per country. Not available for byline or direct ad-ID targets |\n\nProvide at least one of `searchTerms`, `pageIds`, `adIds` or `bylines`. Per-mode requirements are checked in code, so an empty list simply produces a clear status message instead of a crash.\n\n### Example: every active ad from an advertiser Page\n\n```json\n{\n  \"mode\": \"byPage\",\n  \"pageIds\": [\"15087023444\"],\n  \"countries\": [\"US\", \"CA\"],\n  \"adActiveStatus\": \"active\",\n  \"maxItems\": 200\n}\n```\n\n### Example: trace a political funding entity\n\n```json\n{\n  \"mode\": \"byByline\",\n  \"bylines\": [\"JON OSSOFF FOR SENATE\"],\n  \"countries\": [\"US\"],\n  \"adType\": \"political_and_issue_ads\",\n  \"maxItems\": 50\n}\n```\n\n### Example: exact-phrase creative search with a delivery window\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchTerms\": [\"free shipping\"],\n  \"searchType\": \"keyword_exact_phrase\",\n  \"country\": \"GB\",\n  \"startDate\": \"2026-01-01\",\n  \"endDate\": \"2026-06-30\",\n  \"mediaType\": \"video\",\n  \"sortBy\": \"total_impressions\"\n}\n```\n\n### Example: fetch known ads by ID, with EU detail\n\n```json\n{\n  \"mode\": \"byAdId\",\n  \"adIds\": [\"1098840072544828\", \"2619351891814847\"],\n  \"includeEuDetails\": true,\n  \"rehostMedia\": true,\n  \"maxItems\": 2\n}\n```\n\n### Example: count results without downloading them\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchTerms\": [\"nike\", \"adidas\"],\n  \"country\": \"US\",\n  \"onlyTotal\": true\n}\n```\n\n## Use cases\n\n- **Competitive ad monitoring:** pull the current rotation for a competitor Page and compare hooks, offers and landing pages.\n- **Creative research:** collect live ad copy, images, video and carousel cards for a swipe file or mood board.\n- **Political and issue-ad accountability:** follow a \"Paid for by\" committee, then read its spend, impressions and payer/beneficiary data.\n- **EU DSA transparency:** audit an advertiser's EU reach, targeting and demographic breakdown.\n- **Creative-reuse analysis:** sort by `collation_count` to see which creative a brand is scaling hardest.\n- **Known-ad due diligence:** resolve a specific Ad Library ID to its full record before it disappears from the live library.\n\n## FAQ\n\n**Do I need a Facebook account, cookies or a developer app?** No. The actor reads the public Ad Library anonymously. There are no cookie, login or API-key inputs, and none are needed for the daily test.\n\n**Why are spend and impressions missing on some ads?** Meta only publishes those figures for political/issue ads and some EU/UK transparency ads. The actor never estimates or fills them for ordinary commercial ads; the fields are omitted instead.\n\n**Why is a media URL missing or different?** Facebook's own media URLs are signed and expire after a few days. With `rehostMedia` on, the actor copies the primary media (up to 15 MB) to the run's key-value store and returns a permanent URL in `media_url`, keeping the original in `media_url_original` and its expiry in `media_url_original_expires_at`. `media_rehost_status` tells you whether the copy succeeded; if it is `too_large`, `download_failed` or `kv_failed`, `media_url` remains the signed original. Per-card, array and Page profile/cover URLs stay as Meta served them.\n\n**How many ads can one run return?** The Ad Library serves 10 ads per page and the actor follows the cursor until it reaches `maxItems` or the server runs out. Meta's displayed totals cap at 50,001, so a search may honestly report \"50,000+\" rather than an exact larger number.\n\n**Why did a byline search return nothing?** Meta's byline filter matches the funding-entity string exactly and only works inside the political archive. The actor tries the uppercase form first, then the original casing, and also re-checks each returned ad's `byline` field client-side. If nothing matches, you get a diagnostic rather than an unrelated ad.\n\n**Why did an EU political or byline search get remapped?** The political-and-issue archive excludes EU/EEA countries. When those filters are combined, the actor searches the EU transparency stream (`adType=all`) and warns in the run status. For byline targets in EU/EEA countries, the match is checked client-side because Meta may not expose the funding byline there; a zero result is explained as an EU archive limitation, not proof that the funder has no ads. Filter on `categories` to pick out political ads.\n\n**What is `collation_count`?** Meta's own count of ad variants that share one creative and text. It is the fastest built-in signal for creative reuse.\n\n**Can one run mix keyword, Page, Ad ID and byline lookups?** Yes. Leave `mode` empty and fill in any combination of the four lists. Each target is processed in order and every ad is deduplicated by `ad_id` across the whole run.\n\n**Does the actor need a proxy?** No. It chooses a working connection automatically; there is nothing to configure.\n\n**Is this affiliated with Meta?** No. It is an independent tool reading the same public Ad Library pages anyone can browse at facebook.com/ads/library.\n\n## Limitations\n\n- Meta's public payload does not expose spend, impressions or reach for ordinary commercial ads. Those fields are omitted, never estimated.\n- Media URLs from Facebook's CDN are signed and expire. With `rehostMedia`, only the primary `media_url` is copied (15 MB cap); `image_urls`, `video_urls`, `video_preview_urls`, carousel-card URLs and Page profile/cover URLs remain signed. A failed/oversized rehost is marked in `media_rehost_status` and keeps the signed URL rather than pretending to be permanent.\n- The Ad Library page size is 10. Large runs are cursor-bound and can be slow.\n- Displayed totals cap at 50,001 (\"50,000+\"). The actor reports what Meta reports. `onlyTotal` queries one country per record; it does not add the countries together.\n- Byline filtering is exact-cased and works only inside the political/issue archive. Lowercase retries and a client-side byline check are applied. In EU/EEA countries the actor searches `adType=all` because the political archive returns zero there; Meta may not expose the funding byline, so an EU byline zero is a documented limitation, not proof of no ads.\n- Dynamic-creative (DCO/DPA) templates sometimes contain placeholders whose values are not in the public payload. The actor keeps the placeholder and attaches a token-free card variant when one exists; it never invents a brand.\n- `mediaType=meme` is a server-side filter only. The payload has no meme marker, so output `media_type` is always `image`, `video` or `none`.\n- `status`/`is_active` are omitted when Meta does not send a boolean; no `unknown` sentinel is emitted.\n- Page-name typeahead is not supported: use a numeric Page ID or a Page URL containing the ID.\n- Page-owner contact details and admin history are not part of the ad payload and are not shipped.\n- Byline and direct ad-ID totals are unavailable; `onlyTotal` emits an `unsupported_total` diagnostic for those targets because the Ad Library page has no byline filter and an ad page has no search result list.\n- Facebook Page URLs (`ad_snapshot_url`, `page_url`, `page_profile_uri`) return 403 to non-browser HTTP clients. They open normally in a browser; this is an anti-bot posture, not a broken URL.\n- Scheduled watchlists, diffs and e-commerce enrichment are separate use cases and are not part of this actor.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "facebook-ad-library-byline-and-advertiser-ad",
      "title": "Facebook Ad Library Byline & Advertiser Ad Finder",
      "description": "Find Facebook Ad Library ads by advertiser Page, keyword, Ad ID or \"Paid for by\" funding name, with creative, media, run dates, creative reuse, advertiser context and political/EU spend or reach.",
      "version": "1.0",
      "categories": [
        "SOCIAL_MEDIA",
        "MARKETING"
      ],
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 1024
      },
      "meta": {
        "templateId": "python-playwright"
      },
      "readme": "# Facebook Ad Library Byline & Advertiser Ad Finder\n\nLook up who is advertising and what they are running. This actor reads Meta's public Facebook Ad Library without a login, a cookie, or a Meta API token. Start from an advertiser Page, a specific Ad Library ID, a free-text keyword, or the \"Paid for by\" name printed on a political disclaimer, and get one clean record per ad with its creative, media, run window, placements, creative-reuse count, advertiser context, and - when Meta publishes them for political or EU-regulated ads - spend, impressions and reach.\n\n## What this actor does\n\n- **Four lookup paths in one run:** keyword search, advertiser Page (numeric ID or URL), direct Ad Library ID, and \"Paid for by\" byline. Fill in one list or several; a single run processes them all.\n- **Real request-side filters:** country (single or multi-country union), content language, active/inactive status, ad category, media type, publisher platform, keyword match mode, delivery-date window and sort order.\n- **Creative in full:** ad body, title, caption, description, call-to-action, destination link, single image/video URLs, video previews, carousel cards and dynamic-creative placeholder tokens.\n- **Advertiser context:** Page name and ID, Page likes, categories, profile picture and page URL, plus optional per-ad detail data such as page About text, Instagram handle and followers.\n- **Political and EU transparency:** spend and impression ranges, byline, disclaimer label, payer/beneficiary, EU total reach, age/gender/location targeting and reach breakdowns.\n- **Honest by design:** spend, impressions and reach appear only where Meta actually discloses them. Commercial ads never get a guessed number; the field is simply absent. Every empty field is dropped from the record.\n- **Cookieless and setup-free:** no cookies, no login, no API key, and no proxy configuration. The actor manages its own connection automatically.\n\n## Output per ad\n\nEvery record carries `ad_id` (Ad Library archive ID), `ad_snapshot_url` and `sourceUrl` (the ad's public permalink), `recordType: \"ad\"`, `scraped_at` and `scrapedAt`.\n\n**Identity and advertiser**\n\n- `page_id`, `page_name`, `page_url`, `page_profile_uri`, `page_profile_picture_url`\n- `page_like_count`, `page_categories`, `page_is_deleted`, `page_is_restricted`, `page_verification`, `page_alias`, `page_cover_photo_url`\n- `advertiser_about`, `advertiser_page_category`, `advertiser_ig_username`, `advertiser_ig_followers`, `advertiser_ig_verified`, `entity_type`, `page_spend`\n\n**Creative**\n\n- `ad_text`, `title`, `caption`, `link_description`, `cta_text`, `cta_type`, `display_format`\n- `link_url` - the destination the ad sends clicks to\n- `media_type` - `image`, `video` or `none` (derived from the creative). The `mediaType=meme` input is a server-side filter; Meta's payload has no meme marker, so the output never invents `meme`.\n- `media_url` - primary creative. With `rehostMedia`, a successful copy is in `media_url`, the signed original in `media_url_original`/`media_url_original_expires_at`, and `media_rehost_status` says `rehosted`; `media_url_expires_at` is present only while `media_url` itself is a signed fbcdn URL (rehost off/failed). Failure values are `disabled`, `too_large`, `download_failed` and `kv_failed`, with `media_rehost_reason`.\n- `image_urls[]`, `video_urls[]`, `video_preview_urls[]`\n- `cards[]` - carousel cards with `title`, `body`, `caption`, `linkUrl`, `ctaText`, `ctaType`, `imageUrl`, `videoUrls`, `videoPreviewUrl`\n- `template_tokens[]`, `template_body`, `template_title`, `resolved_ad_text`, `resolved_title` - dynamic-creative (DCO/DPA) placeholders and any token-free card variant\n\n**Delivery**\n\n- `start_date`, `end_date` - `YYYY-MM-DD`\n- `days_running` - days between start and end (or today for active ads)\n- `status` - `active` or `inactive`; omitted together with `is_active` when Meta does not send a boolean (no `unknown` sentinel)\n- `publisher_platform[]` - e.g. `FACEBOOK`, `INSTAGRAM`, `MESSENGER`, `AUDIENCE_NETWORK`\n- `collation_count`, `collation_id` - Meta's creative-reuse group and count\n- `categories[]`, `gated_type`, `is_aaa_eligible`, `contains_digital_created_media`, `contains_sensitive_content`, `has_user_reported`, `hide_data_status`, `regional_regulation_data`\n\n**Political and EU transparency (only when Meta publishes it)**\n\n- `spend`, `spend_lower_bound`, `spend_upper_bound`, `currency`\n- `impressions`, `impressions_index`, `impressions_lower_bound`, `impressions_upper_bound`\n- `reach_estimate`, `reach_lower_bound`, `reach_upper_bound`\n- `byline`, `disclaimer_label`\n- `eu_total_reach`, `uk_total_reach`, `br_total_reach`\n- `target_age_audience`, `target_gender_audience`, `target_location_audience`\n- `age_country_gender_reach_breakdown`, `audience_age_gender`, `audience_location`, `audience_single_country`\n- `payer_beneficiary[]`, `violation_types[]`, `is_violating_eu_siep`\n\nWhen `onlyTotal` is on, the dataset contains one summary record per target **per country** instead: `type: \"facebook_ads_library_total\"`, `recordType: \"total\"`, `search_term`, `country`, `total_results`, `scraped_at`. Totals are not available for byline or direct ad-ID targets because the Ad Library page has no byline filter and an ad page has no search result list; those targets get an `unsupported_total` diagnostic.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `\"\"` | `\"\"` processes every provided target list; or choose `search`, `byPage`, `byAdId`, `byByline` |\n| `searchTerms` | array | `[]` | Keywords to search, one query per term. Prefill: `[\"coffee\"]` |\n| `pageIds` | array | `[]` | Facebook Page IDs, or URLs containing `view_all_page_id=` / `profile.php?id=` |\n| `adIds` | array | `[]` | Ad Library IDs, or ads-library URLs containing `?id=` |\n| `bylines` | array | `[]` | Funding-entity names from a political ad's \"Paid for by\" disclaimer. Non-EU targets use the political archive; EU/EEA targets use the all-types EU DSA stream and a client-side byline check |\n| `country` | string | `ALL` | Single ISO 3166-1 alpha-2 country, or `ALL` |\n| `countries` | array | `[]` | Multiple country codes, searched as a union. Takes precedence over `country` |\n| `adActiveStatus` | string | `active` | `all`, `active` or `inactive` |\n| `adType` | string | `all` | `all`, `political_and_issue_ads`, `housing`, `employment` or `credit` |\n| `mediaType` | string | `all` | `all`, `image`, `video`, `meme` or `none`. `meme` is a server-side filter only; output `media_type` stays `image`/`video`/`none` |\n| `publisherPlatforms` | array | `[]` | Only ads shown on Facebook, Instagram, Messenger, Audience Network, WhatsApp or Threads |\n| `contentLanguages` | array | `[]` | 2-letter ISO 639-1 creative languages (full list in the dropdown) |\n| `searchType` | string | `keyword_unordered` | `keyword_unordered` or `keyword_exact_phrase` |\n| `startDate` | string | - | Include ads with delivery on or after this date (`YYYY-MM-DD`) |\n| `endDate` | string | - | Include ads with delivery on or before this date (`YYYY-MM-DD`) |\n| `sortBy` | string | `relevance` | `relevance` or `total_impressions` |\n| `resultsPerSearch` | integer | `50` | Cap per target (1-100000). Prefill: `3` |\n| `maxItems` | integer | `1000` | Cap for the whole run across all targets (1-100000). Prefill: `3` |\n| `includeEuDetails` | boolean | `true` | Fetch per-ad EU transparency and advertiser-profile detail. Adds one request per ad. Prefill: `false` |\n| `rehostMedia` | boolean | `true` | Copy the primary media (max 15 MB) into the run's key-value store and emit a permanent URL. `media_rehost_status` records success/failure; arrays, carousel cards and Page profile/cover URLs stay signed. Prefill: `false` |\n| `onlyTotal` | boolean | `false` | Skip ad records and return one result count per target per country. Not available for byline or direct ad-ID targets |\n\nProvide at least one of `searchTerms`, `pageIds`, `adIds` or `bylines`. Per-mode requirements are checked in code, so an empty list simply produces a clear status message instead of a crash.\n\n### Example: every active ad from an advertiser Page\n\n```json\n{\n  \"mode\": \"byPage\",\n  \"pageIds\": [\"15087023444\"],\n  \"countries\": [\"US\", \"CA\"],\n  \"adActiveStatus\": \"active\",\n  \"maxItems\": 200\n}\n```\n\n### Example: trace a political funding entity\n\n```json\n{\n  \"mode\": \"byByline\",\n  \"bylines\": [\"JON OSSOFF FOR SENATE\"],\n  \"countries\": [\"US\"],\n  \"adType\": \"political_and_issue_ads\",\n  \"maxItems\": 50\n}\n```\n\n### Example: exact-phrase creative search with a delivery window\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchTerms\": [\"free shipping\"],\n  \"searchType\": \"keyword_exact_phrase\",\n  \"country\": \"GB\",\n  \"startDate\": \"2026-01-01\",\n  \"endDate\": \"2026-06-30\",\n  \"mediaType\": \"video\",\n  \"sortBy\": \"total_impressions\"\n}\n```\n\n### Example: fetch known ads by ID, with EU detail\n\n```json\n{\n  \"mode\": \"byAdId\",\n  \"adIds\": [\"1098840072544828\", \"2619351891814847\"],\n  \"includeEuDetails\": true,\n  \"rehostMedia\": true,\n  \"maxItems\": 2\n}\n```\n\n### Example: count results without downloading them\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchTerms\": [\"nike\", \"adidas\"],\n  \"country\": \"US\",\n  \"onlyTotal\": true\n}\n```\n\n## Use cases\n\n- **Competitive ad monitoring:** pull the current rotation for a competitor Page and compare hooks, offers and landing pages.\n- **Creative research:** collect live ad copy, images, video and carousel cards for a swipe file or mood board.\n- **Political and issue-ad accountability:** follow a \"Paid for by\" committee, then read its spend, impressions and payer/beneficiary data.\n- **EU DSA transparency:** audit an advertiser's EU reach, targeting and demographic breakdown.\n- **Creative-reuse analysis:** sort by `collation_count` to see which creative a brand is scaling hardest.\n- **Known-ad due diligence:** resolve a specific Ad Library ID to its full record before it disappears from the live library.\n\n## FAQ\n\n**Do I need a Facebook account, cookies or a developer app?** No. The actor reads the public Ad Library anonymously. There are no cookie, login or API-key inputs, and none are needed for the daily test.\n\n**Why are spend and impressions missing on some ads?** Meta only publishes those figures for political/issue ads and some EU/UK transparency ads. The actor never estimates or fills them for ordinary commercial ads; the fields are omitted instead.\n\n**Why is a media URL missing or different?** Facebook's own media URLs are signed and expire after a few days. With `rehostMedia` on, the actor copies the primary media (up to 15 MB) to the run's key-value store and returns a permanent URL in `media_url`, keeping the original in `media_url_original` and its expiry in `media_url_original_expires_at`. `media_rehost_status` tells you whether the copy succeeded; if it is `too_large`, `download_failed` or `kv_failed`, `media_url` remains the signed original. Per-card, array and Page profile/cover URLs stay as Meta served them.\n\n**How many ads can one run return?** The Ad Library serves 10 ads per page and the actor follows the cursor until it reaches `maxItems` or the server runs out. Meta's displayed totals cap at 50,001, so a search may honestly report \"50,000+\" rather than an exact larger number.\n\n**Why did a byline search return nothing?** Meta's byline filter matches the funding-entity string exactly and only works inside the political archive. The actor tries the uppercase form first, then the original casing, and also re-checks each returned ad's `byline` field client-side. If nothing matches, you get a diagnostic rather than an unrelated ad.\n\n**Why did an EU political or byline search get remapped?** The political-and-issue archive excludes EU/EEA countries. When those filters are combined, the actor searches the EU transparency stream (`adType=all`) and warns in the run status. For byline targets in EU/EEA countries, the match is checked client-side because Meta may not expose the funding byline there; a zero result is explained as an EU archive limitation, not proof that the funder has no ads. Filter on `categories` to pick out political ads.\n\n**What is `collation_count`?** Meta's own count of ad variants that share one creative and text. It is the fastest built-in signal for creative reuse.\n\n**Can one run mix keyword, Page, Ad ID and byline lookups?** Yes. Leave `mode` empty and fill in any combination of the four lists. Each target is processed in order and every ad is deduplicated by `ad_id` across the whole run.\n\n**Does the actor need a proxy?** No. It chooses a working connection automatically; there is nothing to configure.\n\n**Is this affiliated with Meta?** No. It is an independent tool reading the same public Ad Library pages anyone can browse at facebook.com/ads/library.\n\n## Limitations\n\n- Meta's public payload does not expose spend, impressions or reach for ordinary commercial ads. Those fields are omitted, never estimated.\n- Media URLs from Facebook's CDN are signed and expire. With `rehostMedia`, only the primary `media_url` is copied (15 MB cap); `image_urls`, `video_urls`, `video_preview_urls`, carousel-card URLs and Page profile/cover URLs remain signed. A failed/oversized rehost is marked in `media_rehost_status` and keeps the signed URL rather than pretending to be permanent.\n- The Ad Library page size is 10. Large runs are cursor-bound and can be slow.\n- Displayed totals cap at 50,001 (\"50,000+\"). The actor reports what Meta reports. `onlyTotal` queries one country per record; it does not add the countries together.\n- Byline filtering is exact-cased and works only inside the political/issue archive. Lowercase retries and a client-side byline check are applied. In EU/EEA countries the actor searches `adType=all` because the political archive returns zero there; Meta may not expose the funding byline, so an EU byline zero is a documented limitation, not proof of no ads.\n- Dynamic-creative (DCO/DPA) templates sometimes contain placeholders whose values are not in the public payload. The actor keeps the placeholder and attaches a token-free card variant when one exists; it never invents a brand.\n- `mediaType=meme` is a server-side filter only. The payload has no meme marker, so output `media_type` is always `image`, `video` or `none`.\n- `status`/`is_active` are omitted when Meta does not send a boolean; no `unknown` sentinel is emitted.\n- Page-name typeahead is not supported: use a numeric Page ID or a Page URL containing the ID.\n- Page-owner contact details and admin history are not part of the ad payload and are not shipped.\n- Byline and direct ad-ID totals are unavailable; `onlyTotal` emits an `unsupported_total` diagnostic for those targets because the Ad Library page has no byline filter and an ad page has no search result list.\n- Facebook Page URLs (`ad_snapshot_url`, `page_url`, `page_profile_uri`) return 403 to non-browser HTTP clients. They open normally in a browser; this is an anti-bot posture, not a broken URL.\n- Scheduled watchlists, diffs and e-commerce enrichment are separate use cases and are not part of this actor.\n",
      "input": {
        "title": "Facebook Ad Library Byline & Advertiser Ad Finder Input",
        "description": "Find Facebook Ad Library ads by advertiser Page, keyword, direct Ad Library ID, or \"Paid for by\" funding name. Returns creative text, media, run dates, platform placements, creative reuse, advertiser context, and political/EU spend, impression and reach data where Meta publishes it. No login, cookies or Meta API token required.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to scrape. Leave empty to process every target list you filled in (searchTerms, pageIds, adIds, bylines) in one run.",
            "editor": "select",
            "enum": [
              "",
              "search",
              "byPage",
              "byAdId",
              "byByline"
            ],
            "enumTitles": [
              "All provided targets (default)",
              "Search by keyword",
              "All ads from advertiser Pages",
              "Lookup specific ads by Ad Library ID",
              "Search by \"Paid for by\" name"
            ],
            "default": "",
            "prefill": "search"
          },
          "searchTerms": {
            "title": "Search Terms",
            "type": "array",
            "description": "Keywords to search for in the Ad Library, one search per term. Example: [\"coffee\", \"nike\"].",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "prefill": [
              "coffee"
            ],
            "default": []
          },
          "pageIds": {
            "title": "Page IDs / Advertiser Search",
            "type": "array",
            "description": "Facebook Page IDs to fetch all ads from (numeric IDs, or URLs containing view_all_page_id= or profile.php?id=). Each page is searched separately.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "adIds": {
            "title": "Direct Ad IDs",
            "type": "array",
            "description": "Ad Library IDs to fetch directly (numeric IDs or Ads Library URLs containing ?id=). All other filters are ignored in this mode.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "bylines": {
            "title": "Search by \"Paid for by\" name",
            "type": "array",
            "description": "Funding-entity / committee names from the \"Paid for by\" disclaimer on political and issue ads. The actor tries the exact-cased name, retries the original casing, and re-checks each returned ad's byline client-side. Non-EU targets search the political & issue archive; EU/EEA targets use the all-ad-types EU DSA stream (the political archive returns zero there) and may return no byline match because Meta does not always expose it.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Country to search ads in, or ALL for every country. Ignored when the Countries multi-select below is set.",
            "editor": "select",
            "default": "ALL",
            "enum": [
              "ALL",
              "AF",
              "AL",
              "DZ",
              "AS",
              "AD",
              "AO",
              "AI",
              "AQ",
              "AG",
              "AR",
              "AM",
              "AW",
              "AU",
              "AT",
              "AZ",
              "BS",
              "BH",
              "BD",
              "BB",
              "BY",
              "BE",
              "BZ",
              "BJ",
              "BM",
              "BT",
              "BO",
              "BA",
              "BW",
              "BR",
              "BN",
              "BG",
              "BF",
              "BI",
              "KH",
              "CM",
              "CA",
              "CV",
              "KY",
              "CF",
              "TD",
              "CL",
              "CN",
              "CO",
              "KM",
              "CG",
              "CD",
              "CR",
              "HR",
              "CU",
              "CY",
              "CZ",
              "DK",
              "DJ",
              "DM",
              "DO",
              "EC",
              "EG",
              "SV",
              "GQ",
              "ER",
              "EE",
              "SZ",
              "ET",
              "FJ",
              "FI",
              "FR",
              "GF",
              "PF",
              "GA",
              "GM",
              "GE",
              "DE",
              "GH",
              "GI",
              "GR",
              "GL",
              "GD",
              "GP",
              "GU",
              "GT",
              "GN",
              "GW",
              "GY",
              "HT",
              "HN",
              "HK",
              "HU",
              "IS",
              "IN",
              "ID",
              "IR",
              "IQ",
              "IE",
              "IL",
              "IT",
              "JM",
              "JP",
              "JO",
              "KZ",
              "KE",
              "KI",
              "KW",
              "KG",
              "LA",
              "LV",
              "LB",
              "LS",
              "LR",
              "LY",
              "LI",
              "LT",
              "LU",
              "MO",
              "MG",
              "MW",
              "MY",
              "MV",
              "ML",
              "MT",
              "MH",
              "MQ",
              "MR",
              "MU",
              "MX",
              "FM",
              "MD",
              "MC",
              "MN",
              "ME",
              "MS",
              "MA",
              "MZ",
              "MM",
              "NA",
              "NR",
              "NP",
              "NL",
              "NC",
              "NZ",
              "NI",
              "NE",
              "NG",
              "NU",
              "MK",
              "NO",
              "OM",
              "PK",
              "PW",
              "PS",
              "PA",
              "PG",
              "PY",
              "PE",
              "PH",
              "PL",
              "PT",
              "PR",
              "QA",
              "RO",
              "RU",
              "RW",
              "WS",
              "SM",
              "ST",
              "SA",
              "SN",
              "RS",
              "SC",
              "SL",
              "SG",
              "SK",
              "SI",
              "SB",
              "SO",
              "ZA",
              "KR",
              "SS",
              "ES",
              "LK",
              "KN",
              "LC",
              "VC",
              "SD",
              "SR",
              "SE",
              "CH",
              "SY",
              "TW",
              "TJ",
              "TZ",
              "TH",
              "TL",
              "TG",
              "TO",
              "TT",
              "TN",
              "TR",
              "TM",
              "TC",
              "TV",
              "UG",
              "UA",
              "AE",
              "GB",
              "US",
              "UY",
              "UZ",
              "VU",
              "VA",
              "VE",
              "VN",
              "VG",
              "VI",
              "YE",
              "ZM",
              "ZW"
            ],
            "enumTitles": [
              "All Countries",
              "Afghanistan",
              "Albania",
              "Algeria",
              "American Samoa",
              "Andorra",
              "Angola",
              "Anguilla",
              "Antarctica",
              "Antigua and Barbuda",
              "Argentina",
              "Armenia",
              "Aruba",
              "Australia",
              "Austria",
              "Azerbaijan",
              "Bahamas",
              "Bahrain",
              "Bangladesh",
              "Barbados",
              "Belarus",
              "Belgium",
              "Belize",
              "Benin",
              "Bermuda",
              "Bhutan",
              "Bolivia",
              "Bosnia and Herzegovina",
              "Botswana",
              "Brazil",
              "Brunei",
              "Bulgaria",
              "Burkina Faso",
              "Burundi",
              "Cambodia",
              "Cameroon",
              "Canada",
              "Cape Verde",
              "Cayman Islands",
              "Central African Republic",
              "Chad",
              "Chile",
              "China",
              "Colombia",
              "Comoros",
              "Congo",
              "Congo (DRC)",
              "Costa Rica",
              "Croatia",
              "Cuba",
              "Cyprus",
              "Czechia",
              "Denmark",
              "Djibouti",
              "Dominica",
              "Dominican Republic",
              "Ecuador",
              "Egypt",
              "El Salvador",
              "Equatorial Guinea",
              "Eritrea",
              "Estonia",
              "Eswatini",
              "Ethiopia",
              "Fiji",
              "Finland",
              "France",
              "French Guiana",
              "French Polynesia",
              "Gabon",
              "Gambia",
              "Georgia",
              "Germany",
              "Ghana",
              "Gibraltar",
              "Greece",
              "Greenland",
              "Grenada",
              "Guadeloupe",
              "Guam",
              "Guatemala",
              "Guinea",
              "Guinea-Bissau",
              "Guyana",
              "Haiti",
              "Honduras",
              "Hong Kong",
              "Hungary",
              "Iceland",
              "India",
              "Indonesia",
              "Iran",
              "Iraq",
              "Ireland",
              "Israel",
              "Italy",
              "Jamaica",
              "Japan",
              "Jordan",
              "Kazakhstan",
              "Kenya",
              "Kiribati",
              "Kuwait",
              "Kyrgyzstan",
              "Laos",
              "Latvia",
              "Lebanon",
              "Lesotho",
              "Liberia",
              "Libya",
              "Liechtenstein",
              "Lithuania",
              "Luxembourg",
              "Macau",
              "Madagascar",
              "Malawi",
              "Malaysia",
              "Maldives",
              "Mali",
              "Malta",
              "Marshall Islands",
              "Martinique",
              "Mauritania",
              "Mauritius",
              "Mexico",
              "Micronesia",
              "Moldova",
              "Monaco",
              "Mongolia",
              "Montenegro",
              "Montserrat",
              "Morocco",
              "Mozambique",
              "Myanmar",
              "Namibia",
              "Nauru",
              "Nepal",
              "Netherlands",
              "New Caledonia",
              "New Zealand",
              "Nicaragua",
              "Niger",
              "Nigeria",
              "Niue",
              "North Macedonia",
              "Norway",
              "Oman",
              "Pakistan",
              "Palau",
              "Palestine",
              "Panama",
              "Papua New Guinea",
              "Paraguay",
              "Peru",
              "Philippines",
              "Poland",
              "Portugal",
              "Puerto Rico",
              "Qatar",
              "Romania",
              "Russia",
              "Rwanda",
              "Samoa",
              "San Marino",
              "Sao Tome and Principe",
              "Saudi Arabia",
              "Senegal",
              "Serbia",
              "Seychelles",
              "Sierra Leone",
              "Singapore",
              "Slovakia",
              "Slovenia",
              "Solomon Islands",
              "Somalia",
              "South Africa",
              "South Korea",
              "South Sudan",
              "Spain",
              "Sri Lanka",
              "St. Kitts and Nevis",
              "St. Lucia",
              "St. Vincent and the Grenadines",
              "Sudan",
              "Suriname",
              "Sweden",
              "Switzerland",
              "Syria",
              "Taiwan",
              "Tajikistan",
              "Tanzania",
              "Thailand",
              "Timor-Leste",
              "Togo",
              "Tonga",
              "Trinidad and Tobago",
              "Tunisia",
              "Turkiye",
              "Turkmenistan",
              "Turks and Caicos Islands",
              "Tuvalu",
              "Uganda",
              "Ukraine",
              "United Arab Emirates",
              "United Kingdom",
              "United States",
              "Uruguay",
              "Uzbekistan",
              "Vanuatu",
              "Vatican City",
              "Venezuela",
              "Vietnam",
              "British Virgin Islands",
              "U.S. Virgin Islands",
              "Yemen",
              "Zambia",
              "Zimbabwe"
            ]
          },
          "countries": {
            "title": "Countries (multi-select)",
            "type": "array",
            "description": "One or more country codes, searched together as a union (unlike the single Country field). Takes precedence over Country when set.",
            "editor": "select",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": [
                "ALL",
                "AF",
                "AL",
                "DZ",
                "AS",
                "AD",
                "AO",
                "AI",
                "AQ",
                "AG",
                "AR",
                "AM",
                "AW",
                "AU",
                "AT",
                "AZ",
                "BS",
                "BH",
                "BD",
                "BB",
                "BY",
                "BE",
                "BZ",
                "BJ",
                "BM",
                "BT",
                "BO",
                "BA",
                "BW",
                "BR",
                "BN",
                "BG",
                "BF",
                "BI",
                "KH",
                "CM",
                "CA",
                "CV",
                "KY",
                "CF",
                "TD",
                "CL",
                "CN",
                "CO",
                "KM",
                "CG",
                "CD",
                "CR",
                "HR",
                "CU",
                "CY",
                "CZ",
                "DK",
                "DJ",
                "DM",
                "DO",
                "EC",
                "EG",
                "SV",
                "GQ",
                "ER",
                "EE",
                "SZ",
                "ET",
                "FJ",
                "FI",
                "FR",
                "GF",
                "PF",
                "GA",
                "GM",
                "GE",
                "DE",
                "GH",
                "GI",
                "GR",
                "GL",
                "GD",
                "GP",
                "GU",
                "GT",
                "GN",
                "GW",
                "GY",
                "HT",
                "HN",
                "HK",
                "HU",
                "IS",
                "IN",
                "ID",
                "IR",
                "IQ",
                "IE",
                "IL",
                "IT",
                "JM",
                "JP",
                "JO",
                "KZ",
                "KE",
                "KI",
                "KW",
                "KG",
                "LA",
                "LV",
                "LB",
                "LS",
                "LR",
                "LY",
                "LI",
                "LT",
                "LU",
                "MO",
                "MG",
                "MW",
                "MY",
                "MV",
                "ML",
                "MT",
                "MH",
                "MQ",
                "MR",
                "MU",
                "MX",
                "FM",
                "MD",
                "MC",
                "MN",
                "ME",
                "MS",
                "MA",
                "MZ",
                "MM",
                "NA",
                "NR",
                "NP",
                "NL",
                "NC",
                "NZ",
                "NI",
                "NE",
                "NG",
                "NU",
                "MK",
                "NO",
                "OM",
                "PK",
                "PW",
                "PS",
                "PA",
                "PG",
                "PY",
                "PE",
                "PH",
                "PL",
                "PT",
                "PR",
                "QA",
                "RO",
                "RU",
                "RW",
                "WS",
                "SM",
                "ST",
                "SA",
                "SN",
                "RS",
                "SC",
                "SL",
                "SG",
                "SK",
                "SI",
                "SB",
                "SO",
                "ZA",
                "KR",
                "SS",
                "ES",
                "LK",
                "KN",
                "LC",
                "VC",
                "SD",
                "SR",
                "SE",
                "CH",
                "SY",
                "TW",
                "TJ",
                "TZ",
                "TH",
                "TL",
                "TG",
                "TO",
                "TT",
                "TN",
                "TR",
                "TM",
                "TC",
                "TV",
                "UG",
                "UA",
                "AE",
                "GB",
                "US",
                "UY",
                "UZ",
                "VU",
                "VA",
                "VE",
                "VN",
                "VG",
                "VI",
                "YE",
                "ZM",
                "ZW"
              ],
              "enumTitles": [
                "All Countries",
                "Afghanistan",
                "Albania",
                "Algeria",
                "American Samoa",
                "Andorra",
                "Angola",
                "Anguilla",
                "Antarctica",
                "Antigua and Barbuda",
                "Argentina",
                "Armenia",
                "Aruba",
                "Australia",
                "Austria",
                "Azerbaijan",
                "Bahamas",
                "Bahrain",
                "Bangladesh",
                "Barbados",
                "Belarus",
                "Belgium",
                "Belize",
                "Benin",
                "Bermuda",
                "Bhutan",
                "Bolivia",
                "Bosnia and Herzegovina",
                "Botswana",
                "Brazil",
                "Brunei",
                "Bulgaria",
                "Burkina Faso",
                "Burundi",
                "Cambodia",
                "Cameroon",
                "Canada",
                "Cape Verde",
                "Cayman Islands",
                "Central African Republic",
                "Chad",
                "Chile",
                "China",
                "Colombia",
                "Comoros",
                "Congo",
                "Congo (DRC)",
                "Costa Rica",
                "Croatia",
                "Cuba",
                "Cyprus",
                "Czechia",
                "Denmark",
                "Djibouti",
                "Dominica",
                "Dominican Republic",
                "Ecuador",
                "Egypt",
                "El Salvador",
                "Equatorial Guinea",
                "Eritrea",
                "Estonia",
                "Eswatini",
                "Ethiopia",
                "Fiji",
                "Finland",
                "France",
                "French Guiana",
                "French Polynesia",
                "Gabon",
                "Gambia",
                "Georgia",
                "Germany",
                "Ghana",
                "Gibraltar",
                "Greece",
                "Greenland",
                "Grenada",
                "Guadeloupe",
                "Guam",
                "Guatemala",
                "Guinea",
                "Guinea-Bissau",
                "Guyana",
                "Haiti",
                "Honduras",
                "Hong Kong",
                "Hungary",
                "Iceland",
                "India",
                "Indonesia",
                "Iran",
                "Iraq",
                "Ireland",
                "Israel",
                "Italy",
                "Jamaica",
                "Japan",
                "Jordan",
                "Kazakhstan",
                "Kenya",
                "Kiribati",
                "Kuwait",
                "Kyrgyzstan",
                "Laos",
                "Latvia",
                "Lebanon",
                "Lesotho",
                "Liberia",
                "Libya",
                "Liechtenstein",
                "Lithuania",
                "Luxembourg",
                "Macau",
                "Madagascar",
                "Malawi",
                "Malaysia",
                "Maldives",
                "Mali",
                "Malta",
                "Marshall Islands",
                "Martinique",
                "Mauritania",
                "Mauritius",
                "Mexico",
                "Micronesia",
                "Moldova",
                "Monaco",
                "Mongolia",
                "Montenegro",
                "Montserrat",
                "Morocco",
                "Mozambique",
                "Myanmar",
                "Namibia",
                "Nauru",
                "Nepal",
                "Netherlands",
                "New Caledonia",
                "New Zealand",
                "Nicaragua",
                "Niger",
                "Nigeria",
                "Niue",
                "North Macedonia",
                "Norway",
                "Oman",
                "Pakistan",
                "Palau",
                "Palestine",
                "Panama",
                "Papua New Guinea",
                "Paraguay",
                "Peru",
                "Philippines",
                "Poland",
                "Portugal",
                "Puerto Rico",
                "Qatar",
                "Romania",
                "Russia",
                "Rwanda",
                "Samoa",
                "San Marino",
                "Sao Tome and Principe",
                "Saudi Arabia",
                "Senegal",
                "Serbia",
                "Seychelles",
                "Sierra Leone",
                "Singapore",
                "Slovakia",
                "Slovenia",
                "Solomon Islands",
                "Somalia",
                "South Africa",
                "South Korea",
                "South Sudan",
                "Spain",
                "Sri Lanka",
                "St. Kitts and Nevis",
                "St. Lucia",
                "St. Vincent and the Grenadines",
                "Sudan",
                "Suriname",
                "Sweden",
                "Switzerland",
                "Syria",
                "Taiwan",
                "Tajikistan",
                "Tanzania",
                "Thailand",
                "Timor-Leste",
                "Togo",
                "Tonga",
                "Trinidad and Tobago",
                "Tunisia",
                "Turkiye",
                "Turkmenistan",
                "Turks and Caicos Islands",
                "Tuvalu",
                "Uganda",
                "Ukraine",
                "United Arab Emirates",
                "United Kingdom",
                "United States",
                "Uruguay",
                "Uzbekistan",
                "Vanuatu",
                "Vatican City",
                "Venezuela",
                "Vietnam",
                "British Virgin Islands",
                "U.S. Virgin Islands",
                "Yemen",
                "Zambia",
                "Zimbabwe"
              ]
            },
            "default": []
          },
          "adActiveStatus": {
            "title": "Ad Status",
            "type": "string",
            "description": "Filter by ad active status.",
            "default": "active",
            "prefill": "active",
            "enum": [
              "all",
              "active",
              "inactive"
            ],
            "enumTitles": [
              "All Ads",
              "Active Only",
              "Inactive Only"
            ],
            "editor": "select"
          },
          "adType": {
            "title": "Ad Type",
            "type": "string",
            "description": "Filter by ad category. Note: the political-and-issue archive excludes EU/EEA countries, so EU political searches automatically use All Types (EU transparency stream).",
            "default": "all",
            "prefill": "all",
            "enum": [
              "all",
              "political_and_issue_ads",
              "housing",
              "employment",
              "credit"
            ],
            "enumTitles": [
              "All Types",
              "Political & Issue Ads",
              "Housing",
              "Employment",
              "Credit"
            ],
            "editor": "select"
          },
          "mediaType": {
            "title": "Media Type",
            "type": "string",
            "description": "Filter by the ad's creative media type. `meme` is applied server-side only; Meta's payload has no meme marker, so output `media_type` is always image, video or none.",
            "default": "all",
            "prefill": "all",
            "enum": [
              "all",
              "image",
              "video",
              "meme",
              "none"
            ],
            "enumTitles": [
              "All Media",
              "Image",
              "Video",
              "Meme",
              "No Media"
            ],
            "editor": "select"
          },
          "publisherPlatforms": {
            "title": "Publisher Platforms",
            "type": "array",
            "description": "Only return ads shown on these platforms. Leave empty for all platforms.",
            "editor": "select",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "enum": [
                "FACEBOOK",
                "INSTAGRAM",
                "MESSENGER",
                "AUDIENCE_NETWORK",
                "WHATSAPP",
                "THREADS"
              ],
              "enumTitles": [
                "Facebook",
                "Instagram",
                "Messenger",
                "Audience Network",
                "WhatsApp",
                "Threads"
              ]
            },
            "default": []
          },
          "contentLanguages": {
            "title": "Ad Content Languages",
            "type": "array",
            "description": "Only return ads whose creative is written in one of these languages. 2-letter ISO 639-1 codes; leave empty for every language.",
            "editor": "select",
            "uniqueItems": true,
            "default": [],
            "items": {
              "type": "string",
              "enum": [
                "aa",
                "ab",
                "ae",
                "af",
                "ak",
                "am",
                "an",
                "ar",
                "as",
                "av",
                "ay",
                "az",
                "ba",
                "be",
                "bg",
                "bi",
                "bm",
                "bn",
                "bo",
                "br",
                "bs",
                "ca",
                "ce",
                "ch",
                "co",
                "cr",
                "cs",
                "cu",
                "cv",
                "cy",
                "da",
                "de",
                "dv",
                "dz",
                "ee",
                "el",
                "en",
                "eo",
                "es",
                "et",
                "eu",
                "fa",
                "ff",
                "fi",
                "fj",
                "fo",
                "fr",
                "fy",
                "ga",
                "gd",
                "gl",
                "gn",
                "gu",
                "gv",
                "ha",
                "he",
                "hi",
                "ho",
                "hr",
                "ht",
                "hu",
                "hy",
                "hz",
                "ia",
                "id",
                "ie",
                "ig",
                "ii",
                "ik",
                "io",
                "is",
                "it",
                "iu",
                "ja",
                "jv",
                "ka",
                "kg",
                "ki",
                "kj",
                "kk",
                "kl",
                "km",
                "kn",
                "ko",
                "kr",
                "ks",
                "ku",
                "kv",
                "kw",
                "ky",
                "la",
                "lb",
                "lg",
                "li",
                "ln",
                "lo",
                "lt",
                "lu",
                "lv",
                "mg",
                "mh",
                "mi",
                "mk",
                "ml",
                "mn",
                "mr",
                "ms",
                "mt",
                "my",
                "na",
                "nb",
                "nd",
                "ne",
                "ng",
                "nl",
                "nn",
                "no",
                "nr",
                "nv",
                "ny",
                "oc",
                "oj",
                "om",
                "or",
                "os",
                "pa",
                "pi",
                "pl",
                "ps",
                "pt",
                "qu",
                "rm",
                "rn",
                "ro",
                "ru",
                "rw",
                "sa",
                "sc",
                "sd",
                "se",
                "sg",
                "si",
                "sk",
                "sl",
                "sm",
                "sn",
                "so",
                "sq",
                "sr",
                "ss",
                "st",
                "su",
                "sv",
                "sw",
                "ta",
                "te",
                "tg",
                "th",
                "ti",
                "tk",
                "tl",
                "tn",
                "to",
                "tr",
                "ts",
                "tt",
                "tw",
                "ty",
                "ug",
                "uk",
                "ur",
                "uz",
                "ve",
                "vi",
                "vo",
                "wa",
                "wo",
                "xh",
                "yi",
                "yo",
                "za",
                "zh",
                "zu"
              ],
              "enumTitles": [
                "Afar",
                "Abkhazian",
                "Avestan",
                "Afrikaans",
                "Akan",
                "Amharic",
                "Aragonese",
                "Arabic",
                "Assamese",
                "Avaric",
                "Aymara",
                "Azerbaijani",
                "Bashkir",
                "Belarusian",
                "Bulgarian",
                "Bislama",
                "Bambara",
                "Bengali",
                "Tibetan",
                "Breton",
                "Bosnian",
                "Catalan",
                "Chechen",
                "Chamorro",
                "Corsican",
                "Cree",
                "Czech",
                "Church Slavic",
                "Chuvash",
                "Welsh",
                "Danish",
                "German",
                "Divehi",
                "Dzongkha",
                "Ewe",
                "Greek",
                "English",
                "Esperanto",
                "Spanish",
                "Estonian",
                "Basque",
                "Persian",
                "Fulah",
                "Finnish",
                "Fijian",
                "Faroese",
                "French",
                "Western Frisian",
                "Irish",
                "Scottish Gaelic",
                "Galician",
                "Guarani",
                "Gujarati",
                "Manx",
                "Hausa",
                "Hebrew",
                "Hindi",
                "Hiri Motu",
                "Croatian",
                "Haitian Creole",
                "Hungarian",
                "Armenian",
                "Herero",
                "Interlingua",
                "Indonesian",
                "Interlingue",
                "Igbo",
                "Sichuan Yi",
                "Inupiaq",
                "Ido",
                "Icelandic",
                "Italian",
                "Inuktitut",
                "Japanese",
                "Javanese",
                "Georgian",
                "Kongo",
                "Kikuyu",
                "Kuanyama",
                "Kazakh",
                "Kalaallisut",
                "Khmer",
                "Kannada",
                "Korean",
                "Kanuri",
                "Kashmiri",
                "Kurdish",
                "Komi",
                "Cornish",
                "Kyrgyz",
                "Latin",
                "Luxembourgish",
                "Ganda",
                "Limburgish",
                "Lingala",
                "Lao",
                "Lithuanian",
                "Luba-Katanga",
                "Latvian",
                "Malagasy",
                "Marshallese",
                "Maori",
                "Macedonian",
                "Malayalam",
                "Mongolian",
                "Marathi",
                "Malay",
                "Maltese",
                "Burmese",
                "Nauru",
                "Norwegian Bokmal",
                "North Ndebele",
                "Nepali",
                "Ndonga",
                "Dutch",
                "Norwegian Nynorsk",
                "Norwegian",
                "South Ndebele",
                "Navajo",
                "Chichewa",
                "Occitan",
                "Ojibwa",
                "Oromo",
                "Oriya",
                "Ossetian",
                "Punjabi",
                "Pali",
                "Polish",
                "Pashto",
                "Portuguese",
                "Quechua",
                "Romansh",
                "Rundi",
                "Romanian",
                "Russian",
                "Kinyarwanda",
                "Sanskrit",
                "Sardinian",
                "Sindhi",
                "Northern Sami",
                "Sango",
                "Sinhala",
                "Slovak",
                "Slovenian",
                "Samoan",
                "Shona",
                "Somali",
                "Albanian",
                "Serbian",
                "Swati",
                "Southern Sotho",
                "Sundanese",
                "Swedish",
                "Swahili",
                "Tamil",
                "Telugu",
                "Tajik",
                "Thai",
                "Tigrinya",
                "Turkmen",
                "Tagalog",
                "Tswana",
                "Tonga",
                "Turkish",
                "Tsonga",
                "Tatar",
                "Twi",
                "Tahitian",
                "Uyghur",
                "Ukrainian",
                "Urdu",
                "Uzbek",
                "Venda",
                "Vietnamese",
                "Volapuk",
                "Walloon",
                "Wolof",
                "Xhosa",
                "Yiddish",
                "Yoruba",
                "Zhuang",
                "Chinese",
                "Zulu"
              ]
            }
          },
          "searchType": {
            "title": "Keyword Match",
            "type": "string",
            "description": "How keyword search terms are matched (mode=search only).",
            "default": "keyword_unordered",
            "prefill": "keyword_unordered",
            "enum": [
              "keyword_unordered",
              "keyword_exact_phrase"
            ],
            "enumTitles": [
              "Any order (default)",
              "Exact phrase"
            ],
            "editor": "select"
          },
          "startDate": {
            "title": "Start Date",
            "type": "string",
            "description": "Only include ads that had impressions on or after this date (YYYY-MM-DD). Combined with End Date it forms a delivery window.",
            "editor": "datepicker"
          },
          "endDate": {
            "title": "End Date",
            "type": "string",
            "description": "Only include ads that had impressions on or before this date (YYYY-MM-DD).",
            "editor": "datepicker"
          },
          "sortBy": {
            "title": "Sort By",
            "type": "string",
            "description": "Order results by relevance (Facebook's default) or by total impressions.",
            "default": "relevance",
            "prefill": "relevance",
            "enum": [
              "relevance",
              "total_impressions"
            ],
            "enumTitles": [
              "Relevance (default)",
              "Total Impressions"
            ],
            "editor": "select"
          },
          "resultsPerSearch": {
            "title": "Results Per Search Term",
            "type": "integer",
            "description": "Maximum number of ads to extract per search term / page / ad / byline.",
            "default": 50,
            "minimum": 1,
            "maximum": 100000,
            "prefill": 3
          },
          "maxItems": {
            "title": "Max Ads (global)",
            "type": "integer",
            "description": "Stop the whole run after this many ads, across all search targets.",
            "default": 1000,
            "minimum": 1,
            "maximum": 100000,
            "prefill": 3
          },
          "includeEuDetails": {
            "title": "Include EU Transparency & Advertiser Details",
            "type": "boolean",
            "description": "Fetch per-ad detail data: EU total reach, age/country/gender reach breakdown, targeting, payer/beneficiary, advertiser Instagram profile and page About. Adds one extra request per ad.",
            "default": true,
            "prefill": false
          },
          "rehostMedia": {
            "title": "Rehost Media URLs",
            "type": "boolean",
            "description": "Copy each ad's primary media (up to 15 MB) into this run's key-value store and output the permanent URL (Facebook's own media URLs expire after a few days). The original signed URL is kept in media_url_original; media_rehost_status records rehosted/disabled/too_large/download_failed/kv_failed. Arrays, carousel cards and Page profile/cover URLs stay signed.",
            "default": true,
            "prefill": false
          },
          "onlyTotal": {
            "title": "Only Total Results",
            "type": "boolean",
            "description": "Skip ad scraping and return one total per search target per country (one lightweight page request per country, no browser). Counts respect the keyword, country, status, ad type, media type and date window; Facebook caps displayed totals at 50,001 (50,000+). Not available for byline or direct ad-ID targets, which get an unsupported_total diagnostic.",
            "default": false,
            "prefill": false
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Facebook Ad Library Byline & Advertiser Ad Finder Output",
        "description": "One record per Facebook Ad Library ad: creative text, media, run dates, platform placements, creative reuse, advertiser context, and political/EU spend, impression and reach data where Meta publishes it. Fields the source does not provide for an ad are omitted.",
        "properties": {
          "ads": {
            "type": "string",
            "title": "Ad Library Data",
            "description": "Dataset containing all scraped Facebook ads, one JSON object per ad",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Facebook Ad Library Data",
          "views": {
            "overview": {
              "title": "Ad Overview",
              "transformation": {
                "fields": [
                  "ad_id",
                  "page_name",
                  "ad_text",
                  "start_date",
                  "status",
                  "media_type",
                  "cta_text",
                  "link_url",
                  "publisher_platform",
                  "collation_count",
                  "spend",
                  "impressions",
                  "ad_snapshot_url",
                  "search_term"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "ad_id": {
                    "label": "Ad ID",
                    "format": "text"
                  },
                  "page_name": {
                    "label": "Page Name",
                    "format": "text"
                  },
                  "ad_text": {
                    "label": "Ad Text",
                    "format": "text"
                  },
                  "start_date": {
                    "label": "Started",
                    "format": "text"
                  },
                  "status": {
                    "label": "Status",
                    "format": "text"
                  },
                  "media_type": {
                    "label": "Media",
                    "format": "text"
                  },
                  "cta_text": {
                    "label": "CTA",
                    "format": "text"
                  },
                  "link_url": {
                    "label": "Link URL",
                    "format": "link"
                  },
                  "publisher_platform": {
                    "label": "Platforms",
                    "format": "text"
                  },
                  "collation_count": {
                    "label": "Creative Reuse",
                    "format": "text"
                  },
                  "spend": {
                    "label": "Spend",
                    "format": "text"
                  },
                  "impressions": {
                    "label": "Impressions",
                    "format": "text"
                  },
                  "ad_snapshot_url": {
                    "label": "Snapshot URL",
                    "format": "link"
                  },
                  "search_term": {
                    "label": "Search Term",
                    "format": "text"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed View",
              "transformation": {
                "fields": [
                  "ad_id",
                  "page_name",
                  "page_id",
                  "page_url",
                  "ad_text",
                  "resolved_ad_text",
                  "template_tokens",
                  "title",
                  "caption",
                  "cta_text",
                  "link_url",
                  "link_description",
                  "display_format",
                  "start_date",
                  "end_date",
                  "days_running",
                  "status",
                  "is_active",
                  "media_type",
                  "media_url",
                  "image_urls",
                  "video_urls",
                  "publisher_platform",
                  "collation_count",
                  "collation_id",
                  "page_like_count",
                  "page_categories",
                  "advertiser_ig_username",
                  "advertiser_ig_followers",
                  "spend",
                  "impressions",
                  "reach_estimate",
                  "currency",
                  "byline",
                  "disclaimer_label",
                  "gated_type",
                  "regional_regulation_data",
                  "contains_digital_created_media",
                  "ad_snapshot_url",
                  "search_term",
                  "scraped_at"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "ad_id": {
                    "label": "Ad ID",
                    "format": "text"
                  },
                  "page_name": {
                    "label": "Page Name",
                    "format": "text"
                  },
                  "page_id": {
                    "label": "Page ID",
                    "format": "text"
                  },
                  "page_url": {
                    "label": "Page URL",
                    "format": "link"
                  },
                  "ad_text": {
                    "label": "Ad Text",
                    "format": "text"
                  },
                  "resolved_ad_text": {
                    "label": "Resolved Ad Text",
                    "format": "text"
                  },
                  "template_tokens": {
                    "label": "Template Tokens",
                    "format": "text"
                  },
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "caption": {
                    "label": "Caption",
                    "format": "text"
                  },
                  "cta_text": {
                    "label": "CTA",
                    "format": "text"
                  },
                  "link_url": {
                    "label": "Link URL",
                    "format": "link"
                  },
                  "link_description": {
                    "label": "Link Description",
                    "format": "text"
                  },
                  "display_format": {
                    "label": "Display Format",
                    "format": "text"
                  },
                  "start_date": {
                    "label": "Started",
                    "format": "text"
                  },
                  "end_date": {
                    "label": "Ended",
                    "format": "text"
                  },
                  "days_running": {
                    "label": "Days Running",
                    "format": "text"
                  },
                  "status": {
                    "label": "Status",
                    "format": "text"
                  },
                  "is_active": {
                    "label": "Active",
                    "format": "text"
                  },
                  "media_type": {
                    "label": "Media Type",
                    "format": "text"
                  },
                  "media_url": {
                    "label": "Media URL",
                    "format": "link"
                  },
                  "image_urls": {
                    "label": "Image URLs",
                    "format": "text"
                  },
                  "video_urls": {
                    "label": "Video URLs",
                    "format": "text"
                  },
                  "publisher_platform": {
                    "label": "Platforms",
                    "format": "text"
                  },
                  "collation_count": {
                    "label": "Creative Reuse",
                    "format": "text"
                  },
                  "collation_id": {
                    "label": "Collation ID",
                    "format": "text"
                  },
                  "page_like_count": {
                    "label": "Page Likes",
                    "format": "text"
                  },
                  "page_categories": {
                    "label": "Page Categories",
                    "format": "text"
                  },
                  "advertiser_ig_username": {
                    "label": "IG Username",
                    "format": "text"
                  },
                  "advertiser_ig_followers": {
                    "label": "IG Followers",
                    "format": "text"
                  },
                  "spend": {
                    "label": "Spend",
                    "format": "text"
                  },
                  "impressions": {
                    "label": "Impressions",
                    "format": "text"
                  },
                  "reach_estimate": {
                    "label": "Reach Estimate",
                    "format": "text"
                  },
                  "currency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "byline": {
                    "label": "Paid For By",
                    "format": "text"
                  },
                  "disclaimer_label": {
                    "label": "Disclaimer",
                    "format": "text"
                  },
                  "gated_type": {
                    "label": "Gated Type",
                    "format": "text"
                  },
                  "regional_regulation_data": {
                    "label": "Regional Regulation",
                    "format": "text"
                  },
                  "contains_digital_created_media": {
                    "label": "AI Media",
                    "format": "text"
                  },
                  "ad_snapshot_url": {
                    "label": "Snapshot URL",
                    "format": "link"
                  },
                  "search_term": {
                    "label": "Search Term",
                    "format": "text"
                  },
                  "scraped_at": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            },
            "euTransparency": {
              "title": "EU Transparency & Political Ads",
              "transformation": {
                "fields": [
                  "ad_id",
                  "page_name",
                  "byline",
                  "categories",
                  "spend",
                  "spend_lower_bound",
                  "spend_upper_bound",
                  "impressions",
                  "reach_estimate",
                  "currency",
                  "eu_total_reach",
                  "target_age_audience",
                  "target_gender_audience",
                  "target_location_audience",
                  "age_country_gender_reach_breakdown",
                  "payer_beneficiary",
                  "audience_age_gender",
                  "audience_location",
                  "audience_single_country",
                  "violation_types",
                  "is_violating_eu_siep",
                  "ad_snapshot_url",
                  "search_term"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "ad_id": {
                    "label": "Ad ID",
                    "format": "text"
                  },
                  "page_name": {
                    "label": "Page Name",
                    "format": "text"
                  },
                  "byline": {
                    "label": "Paid For By",
                    "format": "text"
                  },
                  "categories": {
                    "label": "Categories",
                    "format": "text"
                  },
                  "spend": {
                    "label": "Spend",
                    "format": "text"
                  },
                  "spend_lower_bound": {
                    "label": "Spend Min",
                    "format": "text"
                  },
                  "spend_upper_bound": {
                    "label": "Spend Max",
                    "format": "text"
                  },
                  "impressions": {
                    "label": "Impressions",
                    "format": "text"
                  },
                  "reach_estimate": {
                    "label": "Reach",
                    "format": "text"
                  },
                  "currency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "eu_total_reach": {
                    "label": "EU Reach",
                    "format": "text"
                  },
                  "target_age_audience": {
                    "label": "Target Ages",
                    "format": "text"
                  },
                  "target_gender_audience": {
                    "label": "Target Gender",
                    "format": "text"
                  },
                  "target_location_audience": {
                    "label": "Target Locations",
                    "format": "text"
                  },
                  "age_country_gender_reach_breakdown": {
                    "label": "Reach Breakdown",
                    "format": "text"
                  },
                  "payer_beneficiary": {
                    "label": "Payer / Beneficiary",
                    "format": "text"
                  },
                  "audience_age_gender": {
                    "label": "Audience Age/Gender",
                    "format": "text"
                  },
                  "audience_location": {
                    "label": "Audience Location",
                    "format": "text"
                  },
                  "audience_single_country": {
                    "label": "Country",
                    "format": "text"
                  },
                  "violation_types": {
                    "label": "Violations",
                    "format": "text"
                  },
                  "is_violating_eu_siep": {
                    "label": "EU SIEP Violation",
                    "format": "text"
                  },
                  "ad_snapshot_url": {
                    "label": "Snapshot URL",
                    "format": "link"
                  },
                  "search_term": {
                    "label": "Search Term",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "6ec0643014b92696a199657957aa93394f7ef4c3500fbc8413e548040ba93cb6",
    "actVersion": {
      "sourceType": "TARBALL",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.09879555555555555
    }
  }
}