{
  "data": {
    "id": "tRkcimJNhPyGnTgpe",
    "actId": "0z2txuRp8mv5mNe3y",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-24T05:41:52.945Z",
    "finishedAt": "2026-10-24T05:42:23.001Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 29986,
      "runTimeSecs": 29.986,
      "computeUnits": 0.03331777777777778,
      "imageSizeBytes": 3099777024
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Traffic Generator Input\",\n  \"description\": \"Generate real-browser pageviews for your own website with configurable volume, visit depth, dwell, referrer, device mix and per-visit evidence.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"targetUrls\": {\n      \"title\": \"Target URLs\",\n      \"type\": \"array\",\n      \"description\": \"Public pages you own or are authorized to test. Legacy startUrls is accepted when this is empty.\",\n      \"editor\": \"requestListSources\",\n      \"prefill\": [\n        {\n          \"url\": \"https://example.com\"\n        }\n      ]\n    },\n    \"pageviews\": {\n      \"title\": \"Pageviews\",\n      \"type\": \"integer\",\n      \"description\": \"Total page loads to attempt, including followed pages. 1-1000.\",\n      \"default\": 10,\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"prefill\": 1\n    },\n    \"pagesPerVisit\": {\n      \"title\": \"Pages per visit\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum pages in one visit (1-10), subject to the total pageview budget; above 1 attempts same-site link clicks when clicks are enabled.\",\n      \"default\": 1,\n      \"minimum\": 1,\n      \"maximum\": 10,\n      \"prefill\": 1\n    },\n    \"visitStyle\": {\n      \"title\": \"Visit style\",\n      \"type\": \"string\",\n      \"description\": \"Human adds dwell, mouse and scroll behaviour. Quick loads the page and leaves without scrolling or clicks.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"human\",\n        \"quick\"\n      ],\n      \"enumTitles\": [\n        \"Human-like visit\",\n        \"Quick load check\"\n      ],\n      \"default\": \"human\",\n      \"prefill\": \"quick\"\n    },\n    \"dwellSeconds\": {\n      \"title\": \"Dwell (seconds)\",\n      \"type\": \"integer\",\n      \"description\": \"Target seconds on each page for human visits, varied slightly. Internal clicks may extend the measured time. Ignored by quick style.\",\n      \"default\": 20,\n      \"minimum\": 1,\n      \"maximum\": 300,\n      \"prefill\": 1\n    },\n    \"referrerMode\": {\n      \"title\": \"Referrer\",\n      \"type\": \"string\",\n      \"description\": \"Referrer shown to the site: direct, search engine, social network, or a custom URL.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"direct\",\n        \"search\",\n        \"social\",\n        \"custom\"\n      ],\n      \"enumTitles\": [\n        \"Direct (no referrer)\",\n        \"Search engine\",\n        \"Social network\",\n        \"Custom URL\"\n      ],\n      \"default\": \"direct\",\n      \"prefill\": \"direct\"\n    },\n    \"customReferrer\": {\n      \"title\": \"Custom referrer URL\",\n      \"type\": \"string\",\n      \"description\": \"Full http(s) URL used when Referrer is Custom URL.\",\n      \"editor\": \"textfield\"\n    },\n    \"scroll\": {\n      \"title\": \"Scroll pages\",\n      \"type\": \"boolean\",\n      \"description\": \"Scroll each page during human visits. Scroll depth is omitted when scrolling is off or no range is measurable; a very short page with a tiny overflow can report 100.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"clickInternalLinks\": {\n      \"title\": \"Click internal links\",\n      \"type\": \"boolean\",\n      \"description\": \"Attempt one visible same-site link per page during human visits. Ads, forms and external links are never clicked.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"deviceMix\": {\n      \"title\": \"Device mix\",\n      \"type\": \"string\",\n      \"description\": \"Device profile for each visit. Mobile and tablet use Android Chromium emulation.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"desktop\",\n        \"mobile\",\n        \"tablet\",\n        \"mixed\"\n      ],\n      \"enumTitles\": [\n        \"Desktop\",\n        \"Mobile\",\n        \"Tablet\",\n        \"Mixed\"\n      ],\n      \"default\": \"mixed\",\n      \"prefill\": \"desktop\"\n    },\n    \"visitCountry\": {\n      \"title\": \"Visit country (optional)\",\n      \"type\": \"string\",\n      \"description\": \"Optional. Route visits through a residential proxy in this country for geo QA. Adds proxy usage.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"none\",\n        \"AD\",\n        \"AE\",\n        \"AF\",\n        \"AG\",\n        \"AI\",\n        \"AL\",\n        \"AM\",\n        \"AO\",\n        \"AQ\",\n        \"AR\",\n        \"AS\",\n        \"AT\",\n        \"AU\",\n        \"AW\",\n        \"AX\",\n        \"AZ\",\n        \"BA\",\n        \"BB\",\n        \"BD\",\n        \"BE\",\n        \"BF\",\n        \"BG\",\n        \"BH\",\n        \"BI\",\n        \"BJ\",\n        \"BL\",\n        \"BM\",\n        \"BN\",\n        \"BO\",\n        \"BQ\",\n        \"BR\",\n        \"BS\",\n        \"BT\",\n        \"BV\",\n        \"BW\",\n        \"BY\",\n        \"BZ\",\n        \"CA\",\n        \"CC\",\n        \"CD\",\n        \"CF\",\n        \"CG\",\n        \"CH\",\n        \"CI\",\n        \"CK\",\n        \"CL\",\n        \"CM\",\n        \"CN\",\n        \"CO\",\n        \"CR\",\n        \"CU\",\n        \"CV\",\n        \"CW\",\n        \"CX\",\n        \"CY\",\n        \"CZ\",\n        \"DE\",\n        \"DJ\",\n        \"DK\",\n        \"DM\",\n        \"DO\",\n        \"DZ\",\n        \"EC\",\n        \"EE\",\n        \"EG\",\n        \"EH\",\n        \"ER\",\n        \"ES\",\n        \"ET\",\n        \"FI\",\n        \"FJ\",\n        \"FK\",\n        \"FM\",\n        \"FO\",\n        \"FR\",\n        \"GA\",\n        \"GB\",\n        \"GD\",\n        \"GE\",\n        \"GF\",\n        \"GG\",\n        \"GH\",\n        \"GI\",\n        \"GL\",\n        \"GM\",\n        \"GN\",\n        \"GP\",\n        \"GQ\",\n        \"GR\",\n        \"GS\",\n        \"GT\",\n        \"GU\",\n        \"GW\",\n        \"GY\",\n        \"HK\",\n        \"HM\",\n        \"HN\",\n        \"HR\",\n        \"HT\",\n        \"HU\",\n        \"ID\",\n        \"IE\",\n        \"IL\",\n        \"IM\",\n        \"IN\",\n        \"IO\",\n        \"IQ\",\n        \"IR\",\n        \"IS\",\n        \"IT\",\n        \"JE\",\n        \"JM\",\n        \"JO\",\n        \"JP\",\n        \"KE\",\n        \"KG\",\n        \"KH\",\n        \"KI\",\n        \"KM\",\n        \"KN\",\n        \"KP\",\n        \"KR\",\n        \"KW\",\n        \"KY\",\n        \"KZ\",\n        \"LA\",\n        \"LB\",\n        \"LC\",\n        \"LI\",\n        \"LK\",\n        \"LR\",\n        \"LS\",\n        \"LT\",\n        \"LU\",\n        \"LV\",\n        \"LY\",\n        \"MA\",\n        \"MC\",\n        \"MD\",\n        \"ME\",\n        \"MF\",\n        \"MG\",\n        \"MH\",\n        \"MK\",\n        \"ML\",\n        \"MM\",\n        \"MN\",\n        \"MO\",\n        \"MP\",\n        \"MQ\",\n        \"MR\",\n        \"MS\",\n        \"MT\",\n        \"MU\",\n        \"MV\",\n        \"MW\",\n        \"MX\",\n        \"MY\",\n        \"MZ\",\n        \"NA\",\n        \"NC\",\n        \"NE\",\n        \"NF\",\n        \"NG\",\n        \"NI\",\n        \"NL\",\n        \"NO\",\n        \"NP\",\n        \"NR\",\n        \"NU\",\n        \"NZ\",\n        \"OM\",\n        \"PA\",\n        \"PE\",\n        \"PF\",\n        \"PG\",\n        \"PH\",\n        \"PK\",\n        \"PL\",\n        \"PM\",\n        \"PN\",\n        \"PR\",\n        \"PS\",\n        \"PT\",\n        \"PW\",\n        \"PY\",\n        \"QA\",\n        \"RE\",\n        \"RO\",\n        \"RS\",\n        \"RU\",\n        \"RW\",\n        \"SA\",\n        \"SB\",\n        \"SC\",\n        \"SD\",\n        \"SE\",\n        \"SG\",\n        \"SH\",\n        \"SI\",\n        \"SJ\",\n        \"SK\",\n        \"SL\",\n        \"SM\",\n        \"SN\",\n        \"SO\",\n        \"SR\",\n        \"SS\",\n        \"ST\",\n        \"SV\",\n        \"SX\",\n        \"SY\",\n        \"SZ\",\n        \"TC\",\n        \"TD\",\n        \"TF\",\n        \"TG\",\n        \"TH\",\n        \"TJ\",\n        \"TK\",\n        \"TL\",\n        \"TM\",\n        \"TN\",\n        \"TO\",\n        \"TR\",\n        \"TT\",\n        \"TV\",\n        \"TW\",\n        \"TZ\",\n        \"UA\",\n        \"UG\",\n        \"UM\",\n        \"US\",\n        \"UY\",\n        \"UZ\",\n        \"VA\",\n        \"VC\",\n        \"VE\",\n        \"VG\",\n        \"VI\",\n        \"VN\",\n        \"VU\",\n        \"WF\",\n        \"WS\",\n        \"YE\",\n        \"YT\",\n        \"ZA\",\n        \"ZM\",\n        \"ZW\"\n      ],\n      \"enumTitles\": [\n        \"No country (direct)\",\n        \"Andorra\",\n        \"United Arab Emirates\",\n        \"Afghanistan\",\n        \"Antigua and Barbuda\",\n        \"Anguilla\",\n        \"Albania\",\n        \"Armenia\",\n        \"Angola\",\n        \"Antarctica\",\n        \"Argentina\",\n        \"American Samoa\",\n        \"Austria\",\n        \"Australia\",\n        \"Aruba\",\n        \"Åland Islands\",\n        \"Azerbaijan\",\n        \"Bosnia and Herzegovina\",\n        \"Barbados\",\n        \"Bangladesh\",\n        \"Belgium\",\n        \"Burkina Faso\",\n        \"Bulgaria\",\n        \"Bahrain\",\n        \"Burundi\",\n        \"Benin\",\n        \"Saint Barthélemy\",\n        \"Bermuda\",\n        \"Brunei Darussalam\",\n        \"Bolivia, Plurinational State of\",\n        \"Bonaire, Sint Eustatius and Saba\",\n        \"Brazil\",\n        \"Bahamas\",\n        \"Bhutan\",\n        \"Bouvet Island\",\n        \"Botswana\",\n        \"Belarus\",\n        \"Belize\",\n        \"Canada\",\n        \"Cocos (Keeling) Islands\",\n        \"Congo, The Democratic Republic of the\",\n        \"Central African Republic\",\n        \"Congo\",\n        \"Switzerland\",\n        \"Côte d'Ivoire\",\n        \"Cook Islands\",\n        \"Chile\",\n        \"Cameroon\",\n        \"China\",\n        \"Colombia\",\n        \"Costa Rica\",\n        \"Cuba\",\n        \"Cabo Verde\",\n        \"Curaçao\",\n        \"Christmas Island\",\n        \"Cyprus\",\n        \"Czechia\",\n        \"Germany\",\n        \"Djibouti\",\n        \"Denmark\",\n        \"Dominica\",\n        \"Dominican Republic\",\n        \"Algeria\",\n        \"Ecuador\",\n        \"Estonia\",\n        \"Egypt\",\n        \"Western Sahara\",\n        \"Eritrea\",\n        \"Spain\",\n        \"Ethiopia\",\n        \"Finland\",\n        \"Fiji\",\n        \"Falkland Islands (Malvinas)\",\n        \"Micronesia, Federated States of\",\n        \"Faroe Islands\",\n        \"France\",\n        \"Gabon\",\n        \"United Kingdom\",\n        \"Grenada\",\n        \"Georgia\",\n        \"French Guiana\",\n        \"Guernsey\",\n        \"Ghana\",\n        \"Gibraltar\",\n        \"Greenland\",\n        \"Gambia\",\n        \"Guinea\",\n        \"Guadeloupe\",\n        \"Equatorial Guinea\",\n        \"Greece\",\n        \"South Georgia and the South Sandwich Islands\",\n        \"Guatemala\",\n        \"Guam\",\n        \"Guinea-Bissau\",\n        \"Guyana\",\n        \"Hong Kong\",\n        \"Heard Island and McDonald Islands\",\n        \"Honduras\",\n        \"Croatia\",\n        \"Haiti\",\n        \"Hungary\",\n        \"Indonesia\",\n        \"Ireland\",\n        \"Israel\",\n        \"Isle of Man\",\n        \"India\",\n        \"British Indian Ocean Territory\",\n        \"Iraq\",\n        \"Iran, Islamic Republic of\",\n        \"Iceland\",\n        \"Italy\",\n        \"Jersey\",\n        \"Jamaica\",\n        \"Jordan\",\n        \"Japan\",\n        \"Kenya\",\n        \"Kyrgyzstan\",\n        \"Cambodia\",\n        \"Kiribati\",\n        \"Comoros\",\n        \"Saint Kitts and Nevis\",\n        \"Korea, Democratic People's Republic of\",\n        \"Korea, Republic of\",\n        \"Kuwait\",\n        \"Cayman Islands\",\n        \"Kazakhstan\",\n        \"Lao People's Democratic Republic\",\n        \"Lebanon\",\n        \"Saint Lucia\",\n        \"Liechtenstein\",\n        \"Sri Lanka\",\n        \"Liberia\",\n        \"Lesotho\",\n        \"Lithuania\",\n        \"Luxembourg\",\n        \"Latvia\",\n        \"Libya\",\n        \"Morocco\",\n        \"Monaco\",\n        \"Moldova, Republic of\",\n        \"Montenegro\",\n        \"Saint Martin (French part)\",\n        \"Madagascar\",\n        \"Marshall Islands\",\n        \"North Macedonia\",\n        \"Mali\",\n        \"Myanmar\",\n        \"Mongolia\",\n        \"Macao\",\n        \"Northern Mariana Islands\",\n        \"Martinique\",\n        \"Mauritania\",\n        \"Montserrat\",\n        \"Malta\",\n        \"Mauritius\",\n        \"Maldives\",\n        \"Malawi\",\n        \"Mexico\",\n        \"Malaysia\",\n        \"Mozambique\",\n        \"Namibia\",\n        \"New Caledonia\",\n        \"Niger\",\n        \"Norfolk Island\",\n        \"Nigeria\",\n        \"Nicaragua\",\n        \"Netherlands\",\n        \"Norway\",\n        \"Nepal\",\n        \"Nauru\",\n        \"Niue\",\n        \"New Zealand\",\n        \"Oman\",\n        \"Panama\",\n        \"Peru\",\n        \"French Polynesia\",\n        \"Papua New Guinea\",\n        \"Philippines\",\n        \"Pakistan\",\n        \"Poland\",\n        \"Saint Pierre and Miquelon\",\n        \"Pitcairn\",\n        \"Puerto Rico\",\n        \"Palestine, State of\",\n        \"Portugal\",\n        \"Palau\",\n        \"Paraguay\",\n        \"Qatar\",\n        \"Réunion\",\n        \"Romania\",\n        \"Serbia\",\n        \"Russian Federation\",\n        \"Rwanda\",\n        \"Saudi Arabia\",\n        \"Solomon Islands\",\n        \"Seychelles\",\n        \"Sudan\",\n        \"Sweden\",\n        \"Singapore\",\n        \"Saint Helena, Ascension and Tristan da Cunha\",\n        \"Slovenia\",\n        \"Svalbard and Jan Mayen\",\n        \"Slovakia\",\n        \"Sierra Leone\",\n        \"San Marino\",\n        \"Senegal\",\n        \"Somalia\",\n        \"Suriname\",\n        \"South Sudan\",\n        \"Sao Tome and Principe\",\n        \"El Salvador\",\n        \"Sint Maarten (Dutch part)\",\n        \"Syrian Arab Republic\",\n        \"Eswatini\",\n        \"Turks and Caicos Islands\",\n        \"Chad\",\n        \"French Southern Territories\",\n        \"Togo\",\n        \"Thailand\",\n        \"Tajikistan\",\n        \"Tokelau\",\n        \"Timor-Leste\",\n        \"Turkmenistan\",\n        \"Tunisia\",\n        \"Tonga\",\n        \"Türkiye\",\n        \"Trinidad and Tobago\",\n        \"Tuvalu\",\n        \"Taiwan, Province of China\",\n        \"Tanzania, United Republic of\",\n        \"Ukraine\",\n        \"Uganda\",\n        \"United States Minor Outlying Islands\",\n        \"United States\",\n        \"Uruguay\",\n        \"Uzbekistan\",\n        \"Holy See (Vatican City State)\",\n        \"Saint Vincent and the Grenadines\",\n        \"Venezuela, Bolivarian Republic of\",\n        \"Virgin Islands, British\",\n        \"Virgin Islands, U.S.\",\n        \"Viet Nam\",\n        \"Vanuatu\",\n        \"Wallis and Futuna\",\n        \"Samoa\",\n        \"Yemen\",\n        \"Mayotte\",\n        \"South Africa\",\n        \"Zambia\",\n        \"Zimbabwe\"\n      ],\n      \"default\": \"none\",\n      \"prefill\": \"none\"\n    },\n    \"blockAds\": {\n      \"title\": \"Block ads\",\n      \"type\": \"boolean\",\n      \"description\": \"Block known ad domains. Analytics requests still load so tag firing can be measured.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"blockImages\": {\n      \"title\": \"Block images\",\n      \"type\": \"boolean\",\n      \"description\": \"Skip images, fonts and media for faster, cheaper visits. Analytics still loads.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"utmSource\": {\n      \"title\": \"Test-source tag (utm_source)\",\n      \"type\": \"string\",\n      \"description\": \"Optional utm_source label appended to target URLs, e.g. traffic-test. Recommended to mark test visits.\",\n      \"editor\": \"textfield\"\n    }\n  }\n}",
    "readme": "# Human-Like Website Pageview Traffic Simulator\n\nSend real Chromium pageviews to a website you own or are authorized to test. Choose how many pages to load, how deep each visit goes, how long it stays, whether it scrolls or follows internal links, which device and country it appears from, and which referrer it reports. Every attempt is written as a dataset row with its measured status, timing, device, referrer, analytics requests and error. A run-level summary is checkpointed while the run progresses, and a graceful stop writes an `aborted` row for an in-flight page.\n\nThis is a testing and monitoring tool. It does not solve CAPTCHAs, click ads, inflate YouTube views, or promise that the visits will appear in Google Analytics or improve rankings. Use it on your own sites or sites you have permission to test.\n\n## What this actor does\n\n- **Real browser visits:** each page loads in Chromium with JavaScript, cookies, redirects and lazy content working normally.\n- **Pageview volume:** request 1–1,000 pageviews; each visit gets its own browser context, cookies and device profile.\n- **Session depth:** attempt to follow one visible same-site link per page, up to 10 pages per visit. A visit can stay on one page when no link is followed or the global pageview budget is used.\n- **Human behaviour:** a jittered dwell target, mouse movement, measured scroll depth and optional internal clicks. A failed click attempt can extend the measured time on a page.\n- **Device, referrer and geo controls:** desktop, Android mobile, Android tablet or a mixed run; direct, search, social or custom referrer; optional residential country for geo QA.\n- **Evidence, not claims:** per-page HTTP status, final URL, load time, actual dwell, actual scroll, links followed, analytics requests observed and a clear error code. A `SUMMARY` record is written to the key-value store and checkpointed during the run.\n\n## Output per pageview\n\n- `url` — the target URL you asked for (before redirects or UTM tagging)\n- `finalUrl` — the final URL after redirects\n- `status` — `success`, `failed`, `blocked`, `timeout` or `aborted`\n- `statusCode` — HTTP response status\n- `pageTitle` — HTML title, omitted for non-HTML pages\n- `loadTimeMs` — time until the DOM was ready\n- `timeOnPageSec` — actual time spent on the page after loading, including click attempts\n- `scrollDepthPercent` — measured scroll depth, omitted when scrolling is off or no range is measurable; a very short page with a tiny overflow can report 100\n- `linksFound` — same-site links present in the page, not only visible ones\n- `linksFollowed` — internal links followed from this page\n- `referrer` — the actual `document.referrer` seen by the page\n- `userAgent`, `viewport`, `device` — the browser profile used\n- `visitId`, `pageviewIndex`, `pageIndex` — traceability for sessions and loops\n- `analyticsTags` — analytics requests observed, e.g. `ga4`, `gtm`, `meta_pixel`, `hotjar` (not proof that the platform accepted a hit)\n- `errorCode`, `error` — a short code and message for failed, blocked or timed-out pages\n- `timestamp` — ISO-8601 UTC time the page attempt started\n\nEmpty or unmeasured fields are omitted, not filled with empty strings or fake zeros. A successful page has no `errorCode`. A graceful stop writes `aborted` for pages that have not yet emitted a row; a hard kill can still omit an in-flight row, while pages already written stay `success`.\n\nA `SUMMARY` record contains requested/attempted pageviews, success/failed/blocked/timeout/aborted counts, error rate, median and p95 load time, median dwell, analytics-request rates and per-target counts. It is checkpointed during the run, so a stopped run still has the latest version.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `targetUrls` | array | – | Public pages you own or are authorized to test (the prefill uses `https://example.com`); legacy `startUrls` is accepted in code |\n| `pageviews` | integer | `10` | Total page loads to attempt (1–1,000) |\n| `pagesPerVisit` | integer | `1` | Maximum pages in one visit (1–10); above 1 attempts same-site link clicks when clicks are enabled and the global pageview budget allows |\n| `visitStyle` | string | `human` | `human` for dwell/scroll/click, `quick` for a fast load check |\n| `dwellSeconds` | integer | `20` | Target seconds per page for human visits (1–300) |\n| `referrerMode` | string | `direct` | `direct`, `search`, `social` or `custom` |\n| `customReferrer` | string | – | Full http(s) URL used when `referrerMode` is `custom` |\n| `scroll` | boolean | `true` | Scroll during human visits; measured depth is omitted if not measurable |\n| `clickInternalLinks` | boolean | `true` | Attempt one visible same-site link per page; never ads, forms or external links |\n| `deviceMix` | string | `mixed` | `desktop`, `mobile`, `tablet` or `mixed` (Android Chromium emulation for mobile/tablet) |\n| `visitCountry` | string | `none` | Optional ISO country for residential-proxy geo QA; `none` keeps visits direct |\n| `blockAds` | boolean | `true` | Block ad domains; analytics requests still load so tag firing can be measured |\n| `blockImages` | boolean | `false` | Skip images, fonts and media for faster visits |\n| `utmSource` | string | – | Optional `utm_source` label appended to target URLs, e.g. `traffic-test` |\n\n## Example: load check on your own site\n\n```json\n{\n  \"targetUrls\": [\n    { \"url\": \"https://www.example.com/\" },\n    { \"url\": \"https://www.example.com/pricing\" }\n  ],\n  \"pageviews\": 20,\n  \"pagesPerVisit\": 1,\n  \"visitStyle\": \"human\",\n  \"dwellSeconds\": 15,\n  \"deviceMix\": \"mixed\",\n  \"referrerMode\": \"direct\"\n}\n```\n\n## Example: analytics-tag QA with a test-source label\n\n```json\n{\n  \"targetUrls\": [{ \"url\": \"https://www.example.com/\" }],\n  \"pageviews\": 10,\n  \"pagesPerVisit\": 2,\n  \"visitStyle\": \"human\",\n  \"dwellSeconds\": 25,\n  \"scroll\": true,\n  \"clickInternalLinks\": true,\n  \"referrerMode\": \"search\",\n  \"utmSource\": \"traffic-test\",\n  \"blockAds\": true\n}\n```\n\nUse the `analyticsTags` field and the `SUMMARY` rates to confirm which analytics requests the page made. Test traffic may still be filtered by an analytics platform; this actor does not guarantee attribution.\n\n## Example: mobile and geo QA\n\n```json\n{\n  \"targetUrls\": [{ \"url\": \"https://www.example.com/\" }],\n  \"pageviews\": 12,\n  \"pagesPerVisit\": 1,\n  \"visitStyle\": \"human\",\n  \"dwellSeconds\": 10,\n  \"deviceMix\": \"mobile\",\n  \"visitCountry\": \"DE\",\n  \"referrerMode\": \"social\"\n}\n```\n\nCountry visits use a residential proxy in that country. If the proxy is unavailable, the page is reported as failed instead of silently falling back to a direct request.\n\n## Example: quick smoke test\n\n```json\n{\n  \"targetUrls\": [\n    { \"url\": \"https://www.example.com/\" },\n    { \"url\": \"https://www.example.com/health\" }\n  ],\n  \"pageviews\": 2,\n  \"visitStyle\": \"quick\",\n  \"blockAds\": true,\n  \"blockImages\": true\n}\n```\n\n## Use cases\n\n- **Load and cache warm-up** — load key pages after a deploy with a realistic browser and short dwell.\n- **Analytics and tag QA** — check whether GA4, GTM, Meta Pixel, Hotjar or other tags actually send data on each page.\n- **Mobile checks** — load pages with Android mobile or tablet profiles and compare status, title and timing.\n- **Geo checks** — request visits through a residential country to test redirects, consent banners, prices or language.\n- **Uptime and broken-link checks** — schedule a small run and watch for `failed`, `blocked`, `timeout` or non-2xx statuses.\n\n## FAQ\n\n### Do I need a proxy?\n\nNo, for new inputs. Visits are direct by default. Set `visitCountry` only when you need a residential exit in a specific country for geo testing; that option adds proxy usage. Old saved inputs that still contain `proxyConfiguration` can also create a proxy; if no group is set, the account's residential group is used and billed. Remove that legacy key for direct visits.\n\n### Will these visits show up in Google Analytics or other analytics tools?\n\nNot necessarily. The actor loads the page in a real browser and records which analytics requests fired, but analytics platforms filter automated traffic and may exclude the visits. Use this actor to test whether tags work, not to inflate audience numbers.\n\n### Why did a page report `blocked`?\n\nThe site answered with 401, 403 or 429, or served a recognizable bot-challenge page. A 403 is reported as `blocked`, a 404 as `failed` with `errorCode=not_found`, and 5xx as `failed` with `errorCode=server_error`; the HTTP status is retained even when the body is empty. The actor does not solve CAPTCHAs and does not try to bypass the block. Change the target, test a staging URL, or use a country proxy where appropriate.\n\n### Why is `scrollDepthPercent` missing on some successful pages?\n\nThe page had no measurable scrollable range, scrolling was turned off, or the depth could not be measured. A page with no range is never forced to 100%, but a very short page with a few pixels of overflow can still report 100% because a wheel step reaches its bottom.\n\n### Why is the actual dwell or page count different from what I set?\n\n`dwellSeconds` is a target, not a hard wall. Waiting for an internal click to navigate can make the measured `timeOnPageSec` longer, and `pagesPerVisit` is a maximum: the run's total pageview budget can end a visit before it reaches that maximum. Both the actual dwell and the actual pages are recorded per visit.\n\n### Does it click ads or inflate YouTube views?\n\nNo. It only attempts visible same-site links; ad elements, forms and external links are skipped. YouTube URLs are treated as ordinary pages, and the actor does not generate views.\n\n### What happens if the run is stopped early?\n\nRows already written stay in the dataset. A graceful stop writes `aborted` rows for in-flight visits, writes the latest `SUMMARY`, and sets a partial status such as `Stopped 3/20`. A hard kill can still omit the in-flight row, but the summary is checkpointed after each page.\n\n### Are my saved inputs from the old version still supported?\n\nYes. An input with only `startUrls` is accepted and mapped to `targetUrls`. Legacy `waitOnPage`, `mode=STRESS`, `enableCrawling`/`maxPagesPerUrl`, `enableAdvancedFingerprinting`, `crawlingLinkSelector` and `blockResources` are applied in code, including when the platform supplies the new defaults. `endAfterSeconds` and YouTube mode are ignored with a warning; the run stops after the requested pageviews.\n\n### Is this affiliated with the websites I test?\n\nNo. It is an independent browser automation tool. Use it only on sites you own or have permission to test, and follow their terms and your local laws.\n\n## Limitations\n\n- No login, basic-auth, form submission or file upload.\n- No CAPTCHA solving or guarantee of bypassing bot protection.\n- No ad clicks, ad impressions or YouTube view generation.\n- Mobile and tablet profiles use Android Chromium emulation, not iOS Safari.\n- Direct visits come from the actor's network; some sites will block them. Country visits depend on residential proxy availability.\n- Analytics platforms may filter automated traffic; `analyticsTags` records requests the page made, not hits the platform accepted.\n- Target URLs and redirect destinations are checked against the private/loopback guard before navigation.\n- A hard kill can omit the in-flight page row; graceful stops write `aborted` and a checkpointed summary.\n- The actor does not claim to improve SEO rankings or audience metrics.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "human-like-website-pageview-traffic-simulator",
      "title": "Human-Like Website Pageview Traffic Simulator",
      "description": "Generate real-browser pageviews for websites you own or are authorized to test. Set volume, visit depth, dwell, scroll, click, device mix, referrer and an optional test-source tag; get per-visit status, timing, analytics-tag and error logs.",
      "version": "1.0",
      "buildTag": "latest",
      "input": {
        "title": "Traffic Generator Input",
        "description": "Generate real-browser pageviews for your own website with configurable volume, visit depth, dwell, referrer, device mix and per-visit evidence.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "targetUrls": {
            "title": "Target URLs",
            "type": "array",
            "description": "Public pages you own or are authorized to test. Legacy startUrls is accepted when this is empty.",
            "editor": "requestListSources",
            "prefill": [
              {
                "url": "https://example.com"
              }
            ]
          },
          "pageviews": {
            "title": "Pageviews",
            "type": "integer",
            "description": "Total page loads to attempt, including followed pages. 1-1000.",
            "default": 10,
            "minimum": 1,
            "maximum": 1000,
            "prefill": 1
          },
          "pagesPerVisit": {
            "title": "Pages per visit",
            "type": "integer",
            "description": "Maximum pages in one visit (1-10), subject to the total pageview budget; above 1 attempts same-site link clicks when clicks are enabled.",
            "default": 1,
            "minimum": 1,
            "maximum": 10,
            "prefill": 1
          },
          "visitStyle": {
            "title": "Visit style",
            "type": "string",
            "description": "Human adds dwell, mouse and scroll behaviour. Quick loads the page and leaves without scrolling or clicks.",
            "editor": "select",
            "enum": [
              "human",
              "quick"
            ],
            "enumTitles": [
              "Human-like visit",
              "Quick load check"
            ],
            "default": "human",
            "prefill": "quick"
          },
          "dwellSeconds": {
            "title": "Dwell (seconds)",
            "type": "integer",
            "description": "Target seconds on each page for human visits, varied slightly. Internal clicks may extend the measured time. Ignored by quick style.",
            "default": 20,
            "minimum": 1,
            "maximum": 300,
            "prefill": 1
          },
          "referrerMode": {
            "title": "Referrer",
            "type": "string",
            "description": "Referrer shown to the site: direct, search engine, social network, or a custom URL.",
            "editor": "select",
            "enum": [
              "direct",
              "search",
              "social",
              "custom"
            ],
            "enumTitles": [
              "Direct (no referrer)",
              "Search engine",
              "Social network",
              "Custom URL"
            ],
            "default": "direct",
            "prefill": "direct"
          },
          "customReferrer": {
            "title": "Custom referrer URL",
            "type": "string",
            "description": "Full http(s) URL used when Referrer is Custom URL.",
            "editor": "textfield"
          },
          "scroll": {
            "title": "Scroll pages",
            "type": "boolean",
            "description": "Scroll each page during human visits. Scroll depth is omitted when scrolling is off or no range is measurable; a very short page with a tiny overflow can report 100.",
            "default": true,
            "prefill": false
          },
          "clickInternalLinks": {
            "title": "Click internal links",
            "type": "boolean",
            "description": "Attempt one visible same-site link per page during human visits. Ads, forms and external links are never clicked.",
            "default": true,
            "prefill": false
          },
          "deviceMix": {
            "title": "Device mix",
            "type": "string",
            "description": "Device profile for each visit. Mobile and tablet use Android Chromium emulation.",
            "editor": "select",
            "enum": [
              "desktop",
              "mobile",
              "tablet",
              "mixed"
            ],
            "enumTitles": [
              "Desktop",
              "Mobile",
              "Tablet",
              "Mixed"
            ],
            "default": "mixed",
            "prefill": "desktop"
          },
          "visitCountry": {
            "title": "Visit country (optional)",
            "type": "string",
            "description": "Optional. Route visits through a residential proxy in this country for geo QA. Adds proxy usage.",
            "editor": "select",
            "enum": [
              "none",
              "AD",
              "AE",
              "AF",
              "AG",
              "AI",
              "AL",
              "AM",
              "AO",
              "AQ",
              "AR",
              "AS",
              "AT",
              "AU",
              "AW",
              "AX",
              "AZ",
              "BA",
              "BB",
              "BD",
              "BE",
              "BF",
              "BG",
              "BH",
              "BI",
              "BJ",
              "BL",
              "BM",
              "BN",
              "BO",
              "BQ",
              "BR",
              "BS",
              "BT",
              "BV",
              "BW",
              "BY",
              "BZ",
              "CA",
              "CC",
              "CD",
              "CF",
              "CG",
              "CH",
              "CI",
              "CK",
              "CL",
              "CM",
              "CN",
              "CO",
              "CR",
              "CU",
              "CV",
              "CW",
              "CX",
              "CY",
              "CZ",
              "DE",
              "DJ",
              "DK",
              "DM",
              "DO",
              "DZ",
              "EC",
              "EE",
              "EG",
              "EH",
              "ER",
              "ES",
              "ET",
              "FI",
              "FJ",
              "FK",
              "FM",
              "FO",
              "FR",
              "GA",
              "GB",
              "GD",
              "GE",
              "GF",
              "GG",
              "GH",
              "GI",
              "GL",
              "GM",
              "GN",
              "GP",
              "GQ",
              "GR",
              "GS",
              "GT",
              "GU",
              "GW",
              "GY",
              "HK",
              "HM",
              "HN",
              "HR",
              "HT",
              "HU",
              "ID",
              "IE",
              "IL",
              "IM",
              "IN",
              "IO",
              "IQ",
              "IR",
              "IS",
              "IT",
              "JE",
              "JM",
              "JO",
              "JP",
              "KE",
              "KG",
              "KH",
              "KI",
              "KM",
              "KN",
              "KP",
              "KR",
              "KW",
              "KY",
              "KZ",
              "LA",
              "LB",
              "LC",
              "LI",
              "LK",
              "LR",
              "LS",
              "LT",
              "LU",
              "LV",
              "LY",
              "MA",
              "MC",
              "MD",
              "ME",
              "MF",
              "MG",
              "MH",
              "MK",
              "ML",
              "MM",
              "MN",
              "MO",
              "MP",
              "MQ",
              "MR",
              "MS",
              "MT",
              "MU",
              "MV",
              "MW",
              "MX",
              "MY",
              "MZ",
              "NA",
              "NC",
              "NE",
              "NF",
              "NG",
              "NI",
              "NL",
              "NO",
              "NP",
              "NR",
              "NU",
              "NZ",
              "OM",
              "PA",
              "PE",
              "PF",
              "PG",
              "PH",
              "PK",
              "PL",
              "PM",
              "PN",
              "PR",
              "PS",
              "PT",
              "PW",
              "PY",
              "QA",
              "RE",
              "RO",
              "RS",
              "RU",
              "RW",
              "SA",
              "SB",
              "SC",
              "SD",
              "SE",
              "SG",
              "SH",
              "SI",
              "SJ",
              "SK",
              "SL",
              "SM",
              "SN",
              "SO",
              "SR",
              "SS",
              "ST",
              "SV",
              "SX",
              "SY",
              "SZ",
              "TC",
              "TD",
              "TF",
              "TG",
              "TH",
              "TJ",
              "TK",
              "TL",
              "TM",
              "TN",
              "TO",
              "TR",
              "TT",
              "TV",
              "TW",
              "TZ",
              "UA",
              "UG",
              "UM",
              "US",
              "UY",
              "UZ",
              "VA",
              "VC",
              "VE",
              "VG",
              "VI",
              "VN",
              "VU",
              "WF",
              "WS",
              "YE",
              "YT",
              "ZA",
              "ZM",
              "ZW"
            ],
            "enumTitles": [
              "No country (direct)",
              "Andorra",
              "United Arab Emirates",
              "Afghanistan",
              "Antigua and Barbuda",
              "Anguilla",
              "Albania",
              "Armenia",
              "Angola",
              "Antarctica",
              "Argentina",
              "American Samoa",
              "Austria",
              "Australia",
              "Aruba",
              "Åland Islands",
              "Azerbaijan",
              "Bosnia and Herzegovina",
              "Barbados",
              "Bangladesh",
              "Belgium",
              "Burkina Faso",
              "Bulgaria",
              "Bahrain",
              "Burundi",
              "Benin",
              "Saint Barthélemy",
              "Bermuda",
              "Brunei Darussalam",
              "Bolivia, Plurinational State of",
              "Bonaire, Sint Eustatius and Saba",
              "Brazil",
              "Bahamas",
              "Bhutan",
              "Bouvet Island",
              "Botswana",
              "Belarus",
              "Belize",
              "Canada",
              "Cocos (Keeling) Islands",
              "Congo, The Democratic Republic of the",
              "Central African Republic",
              "Congo",
              "Switzerland",
              "Côte d'Ivoire",
              "Cook Islands",
              "Chile",
              "Cameroon",
              "China",
              "Colombia",
              "Costa Rica",
              "Cuba",
              "Cabo Verde",
              "Curaçao",
              "Christmas Island",
              "Cyprus",
              "Czechia",
              "Germany",
              "Djibouti",
              "Denmark",
              "Dominica",
              "Dominican Republic",
              "Algeria",
              "Ecuador",
              "Estonia",
              "Egypt",
              "Western Sahara",
              "Eritrea",
              "Spain",
              "Ethiopia",
              "Finland",
              "Fiji",
              "Falkland Islands (Malvinas)",
              "Micronesia, Federated States of",
              "Faroe Islands",
              "France",
              "Gabon",
              "United Kingdom",
              "Grenada",
              "Georgia",
              "French Guiana",
              "Guernsey",
              "Ghana",
              "Gibraltar",
              "Greenland",
              "Gambia",
              "Guinea",
              "Guadeloupe",
              "Equatorial Guinea",
              "Greece",
              "South Georgia and the South Sandwich Islands",
              "Guatemala",
              "Guam",
              "Guinea-Bissau",
              "Guyana",
              "Hong Kong",
              "Heard Island and McDonald Islands",
              "Honduras",
              "Croatia",
              "Haiti",
              "Hungary",
              "Indonesia",
              "Ireland",
              "Israel",
              "Isle of Man",
              "India",
              "British Indian Ocean Territory",
              "Iraq",
              "Iran, Islamic Republic of",
              "Iceland",
              "Italy",
              "Jersey",
              "Jamaica",
              "Jordan",
              "Japan",
              "Kenya",
              "Kyrgyzstan",
              "Cambodia",
              "Kiribati",
              "Comoros",
              "Saint Kitts and Nevis",
              "Korea, Democratic People's Republic of",
              "Korea, Republic of",
              "Kuwait",
              "Cayman Islands",
              "Kazakhstan",
              "Lao People's Democratic Republic",
              "Lebanon",
              "Saint Lucia",
              "Liechtenstein",
              "Sri Lanka",
              "Liberia",
              "Lesotho",
              "Lithuania",
              "Luxembourg",
              "Latvia",
              "Libya",
              "Morocco",
              "Monaco",
              "Moldova, Republic of",
              "Montenegro",
              "Saint Martin (French part)",
              "Madagascar",
              "Marshall Islands",
              "North Macedonia",
              "Mali",
              "Myanmar",
              "Mongolia",
              "Macao",
              "Northern Mariana Islands",
              "Martinique",
              "Mauritania",
              "Montserrat",
              "Malta",
              "Mauritius",
              "Maldives",
              "Malawi",
              "Mexico",
              "Malaysia",
              "Mozambique",
              "Namibia",
              "New Caledonia",
              "Niger",
              "Norfolk Island",
              "Nigeria",
              "Nicaragua",
              "Netherlands",
              "Norway",
              "Nepal",
              "Nauru",
              "Niue",
              "New Zealand",
              "Oman",
              "Panama",
              "Peru",
              "French Polynesia",
              "Papua New Guinea",
              "Philippines",
              "Pakistan",
              "Poland",
              "Saint Pierre and Miquelon",
              "Pitcairn",
              "Puerto Rico",
              "Palestine, State of",
              "Portugal",
              "Palau",
              "Paraguay",
              "Qatar",
              "Réunion",
              "Romania",
              "Serbia",
              "Russian Federation",
              "Rwanda",
              "Saudi Arabia",
              "Solomon Islands",
              "Seychelles",
              "Sudan",
              "Sweden",
              "Singapore",
              "Saint Helena, Ascension and Tristan da Cunha",
              "Slovenia",
              "Svalbard and Jan Mayen",
              "Slovakia",
              "Sierra Leone",
              "San Marino",
              "Senegal",
              "Somalia",
              "Suriname",
              "South Sudan",
              "Sao Tome and Principe",
              "El Salvador",
              "Sint Maarten (Dutch part)",
              "Syrian Arab Republic",
              "Eswatini",
              "Turks and Caicos Islands",
              "Chad",
              "French Southern Territories",
              "Togo",
              "Thailand",
              "Tajikistan",
              "Tokelau",
              "Timor-Leste",
              "Turkmenistan",
              "Tunisia",
              "Tonga",
              "Türkiye",
              "Trinidad and Tobago",
              "Tuvalu",
              "Taiwan, Province of China",
              "Tanzania, United Republic of",
              "Ukraine",
              "Uganda",
              "United States Minor Outlying Islands",
              "United States",
              "Uruguay",
              "Uzbekistan",
              "Holy See (Vatican City State)",
              "Saint Vincent and the Grenadines",
              "Venezuela, Bolivarian Republic of",
              "Virgin Islands, British",
              "Virgin Islands, U.S.",
              "Viet Nam",
              "Vanuatu",
              "Wallis and Futuna",
              "Samoa",
              "Yemen",
              "Mayotte",
              "South Africa",
              "Zambia",
              "Zimbabwe"
            ],
            "default": "none",
            "prefill": "none"
          },
          "blockAds": {
            "title": "Block ads",
            "type": "boolean",
            "description": "Block known ad domains. Analytics requests still load so tag firing can be measured.",
            "default": true,
            "prefill": false
          },
          "blockImages": {
            "title": "Block images",
            "type": "boolean",
            "description": "Skip images, fonts and media for faster, cheaper visits. Analytics still loads.",
            "default": false,
            "prefill": false
          },
          "utmSource": {
            "title": "Test-source tag (utm_source)",
            "type": "string",
            "description": "Optional utm_source label appended to target URLs, e.g. traffic-test. Recommended to mark test visits.",
            "editor": "textfield"
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Human-Like Website Pageview Traffic Simulator Output",
        "description": "Per-pageview records from real Chromium visits: status, timing, device, referrer, analytics tags and errors.",
        "properties": {
          "visits": {
            "type": "string",
            "title": "Page Visits",
            "description": "Dataset containing every attempted pageview with its measured status and timing.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Page Visits",
              "transformation": {
                "fields": [
                  "url",
                  "finalUrl",
                  "status",
                  "statusCode",
                  "pageTitle",
                  "loadTimeMs",
                  "timeOnPageSec",
                  "scrollDepthPercent",
                  "linksFound",
                  "linksFollowed",
                  "device",
                  "referrer",
                  "analyticsTags",
                  "errorCode",
                  "timestamp"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "finalUrl": {
                    "label": "Final URL",
                    "format": "link"
                  },
                  "status": {
                    "label": "Status",
                    "format": "text"
                  },
                  "statusCode": {
                    "label": "statusCode",
                    "format": "number"
                  },
                  "pageTitle": {
                    "label": "Page Title",
                    "format": "text"
                  },
                  "loadTimeMs": {
                    "label": "Load (ms)",
                    "format": "number"
                  },
                  "timeOnPageSec": {
                    "label": "Time (s)",
                    "format": "number"
                  },
                  "scrollDepthPercent": {
                    "label": "Scroll %",
                    "format": "number"
                  },
                  "linksFound": {
                    "label": "Links",
                    "format": "number"
                  },
                  "linksFollowed": {
                    "label": "Followed",
                    "format": "number"
                  },
                  "device": {
                    "label": "device",
                    "format": "text"
                  },
                  "referrer": {
                    "label": "referrer",
                    "format": "text"
                  },
                  "analyticsTags": {
                    "label": "analyticsTags",
                    "format": "text"
                  },
                  "errorCode": {
                    "label": "errorCode",
                    "format": "text"
                  },
                  "timestamp": {
                    "label": "Timestamp",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# Human-Like Website Pageview Traffic Simulator\n\nSend real Chromium pageviews to a website you own or are authorized to test. Choose how many pages to load, how deep each visit goes, how long it stays, whether it scrolls or follows internal links, which device and country it appears from, and which referrer it reports. Every attempt is written as a dataset row with its measured status, timing, device, referrer, analytics requests and error. A run-level summary is checkpointed while the run progresses, and a graceful stop writes an `aborted` row for an in-flight page.\n\nThis is a testing and monitoring tool. It does not solve CAPTCHAs, click ads, inflate YouTube views, or promise that the visits will appear in Google Analytics or improve rankings. Use it on your own sites or sites you have permission to test.\n\n## What this actor does\n\n- **Real browser visits:** each page loads in Chromium with JavaScript, cookies, redirects and lazy content working normally.\n- **Pageview volume:** request 1–1,000 pageviews; each visit gets its own browser context, cookies and device profile.\n- **Session depth:** attempt to follow one visible same-site link per page, up to 10 pages per visit. A visit can stay on one page when no link is followed or the global pageview budget is used.\n- **Human behaviour:** a jittered dwell target, mouse movement, measured scroll depth and optional internal clicks. A failed click attempt can extend the measured time on a page.\n- **Device, referrer and geo controls:** desktop, Android mobile, Android tablet or a mixed run; direct, search, social or custom referrer; optional residential country for geo QA.\n- **Evidence, not claims:** per-page HTTP status, final URL, load time, actual dwell, actual scroll, links followed, analytics requests observed and a clear error code. A `SUMMARY` record is written to the key-value store and checkpointed during the run.\n\n## Output per pageview\n\n- `url` — the target URL you asked for (before redirects or UTM tagging)\n- `finalUrl` — the final URL after redirects\n- `status` — `success`, `failed`, `blocked`, `timeout` or `aborted`\n- `statusCode` — HTTP response status\n- `pageTitle` — HTML title, omitted for non-HTML pages\n- `loadTimeMs` — time until the DOM was ready\n- `timeOnPageSec` — actual time spent on the page after loading, including click attempts\n- `scrollDepthPercent` — measured scroll depth, omitted when scrolling is off or no range is measurable; a very short page with a tiny overflow can report 100\n- `linksFound` — same-site links present in the page, not only visible ones\n- `linksFollowed` — internal links followed from this page\n- `referrer` — the actual `document.referrer` seen by the page\n- `userAgent`, `viewport`, `device` — the browser profile used\n- `visitId`, `pageviewIndex`, `pageIndex` — traceability for sessions and loops\n- `analyticsTags` — analytics requests observed, e.g. `ga4`, `gtm`, `meta_pixel`, `hotjar` (not proof that the platform accepted a hit)\n- `errorCode`, `error` — a short code and message for failed, blocked or timed-out pages\n- `timestamp` — ISO-8601 UTC time the page attempt started\n\nEmpty or unmeasured fields are omitted, not filled with empty strings or fake zeros. A successful page has no `errorCode`. A graceful stop writes `aborted` for pages that have not yet emitted a row; a hard kill can still omit an in-flight row, while pages already written stay `success`.\n\nA `SUMMARY` record contains requested/attempted pageviews, success/failed/blocked/timeout/aborted counts, error rate, median and p95 load time, median dwell, analytics-request rates and per-target counts. It is checkpointed during the run, so a stopped run still has the latest version.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `targetUrls` | array | – | Public pages you own or are authorized to test (the prefill uses `https://example.com`); legacy `startUrls` is accepted in code |\n| `pageviews` | integer | `10` | Total page loads to attempt (1–1,000) |\n| `pagesPerVisit` | integer | `1` | Maximum pages in one visit (1–10); above 1 attempts same-site link clicks when clicks are enabled and the global pageview budget allows |\n| `visitStyle` | string | `human` | `human` for dwell/scroll/click, `quick` for a fast load check |\n| `dwellSeconds` | integer | `20` | Target seconds per page for human visits (1–300) |\n| `referrerMode` | string | `direct` | `direct`, `search`, `social` or `custom` |\n| `customReferrer` | string | – | Full http(s) URL used when `referrerMode` is `custom` |\n| `scroll` | boolean | `true` | Scroll during human visits; measured depth is omitted if not measurable |\n| `clickInternalLinks` | boolean | `true` | Attempt one visible same-site link per page; never ads, forms or external links |\n| `deviceMix` | string | `mixed` | `desktop`, `mobile`, `tablet` or `mixed` (Android Chromium emulation for mobile/tablet) |\n| `visitCountry` | string | `none` | Optional ISO country for residential-proxy geo QA; `none` keeps visits direct |\n| `blockAds` | boolean | `true` | Block ad domains; analytics requests still load so tag firing can be measured |\n| `blockImages` | boolean | `false` | Skip images, fonts and media for faster visits |\n| `utmSource` | string | – | Optional `utm_source` label appended to target URLs, e.g. `traffic-test` |\n\n## Example: load check on your own site\n\n```json\n{\n  \"targetUrls\": [\n    { \"url\": \"https://www.example.com/\" },\n    { \"url\": \"https://www.example.com/pricing\" }\n  ],\n  \"pageviews\": 20,\n  \"pagesPerVisit\": 1,\n  \"visitStyle\": \"human\",\n  \"dwellSeconds\": 15,\n  \"deviceMix\": \"mixed\",\n  \"referrerMode\": \"direct\"\n}\n```\n\n## Example: analytics-tag QA with a test-source label\n\n```json\n{\n  \"targetUrls\": [{ \"url\": \"https://www.example.com/\" }],\n  \"pageviews\": 10,\n  \"pagesPerVisit\": 2,\n  \"visitStyle\": \"human\",\n  \"dwellSeconds\": 25,\n  \"scroll\": true,\n  \"clickInternalLinks\": true,\n  \"referrerMode\": \"search\",\n  \"utmSource\": \"traffic-test\",\n  \"blockAds\": true\n}\n```\n\nUse the `analyticsTags` field and the `SUMMARY` rates to confirm which analytics requests the page made. Test traffic may still be filtered by an analytics platform; this actor does not guarantee attribution.\n\n## Example: mobile and geo QA\n\n```json\n{\n  \"targetUrls\": [{ \"url\": \"https://www.example.com/\" }],\n  \"pageviews\": 12,\n  \"pagesPerVisit\": 1,\n  \"visitStyle\": \"human\",\n  \"dwellSeconds\": 10,\n  \"deviceMix\": \"mobile\",\n  \"visitCountry\": \"DE\",\n  \"referrerMode\": \"social\"\n}\n```\n\nCountry visits use a residential proxy in that country. If the proxy is unavailable, the page is reported as failed instead of silently falling back to a direct request.\n\n## Example: quick smoke test\n\n```json\n{\n  \"targetUrls\": [\n    { \"url\": \"https://www.example.com/\" },\n    { \"url\": \"https://www.example.com/health\" }\n  ],\n  \"pageviews\": 2,\n  \"visitStyle\": \"quick\",\n  \"blockAds\": true,\n  \"blockImages\": true\n}\n```\n\n## Use cases\n\n- **Load and cache warm-up** — load key pages after a deploy with a realistic browser and short dwell.\n- **Analytics and tag QA** — check whether GA4, GTM, Meta Pixel, Hotjar or other tags actually send data on each page.\n- **Mobile checks** — load pages with Android mobile or tablet profiles and compare status, title and timing.\n- **Geo checks** — request visits through a residential country to test redirects, consent banners, prices or language.\n- **Uptime and broken-link checks** — schedule a small run and watch for `failed`, `blocked`, `timeout` or non-2xx statuses.\n\n## FAQ\n\n### Do I need a proxy?\n\nNo, for new inputs. Visits are direct by default. Set `visitCountry` only when you need a residential exit in a specific country for geo testing; that option adds proxy usage. Old saved inputs that still contain `proxyConfiguration` can also create a proxy; if no group is set, the account's residential group is used and billed. Remove that legacy key for direct visits.\n\n### Will these visits show up in Google Analytics or other analytics tools?\n\nNot necessarily. The actor loads the page in a real browser and records which analytics requests fired, but analytics platforms filter automated traffic and may exclude the visits. Use this actor to test whether tags work, not to inflate audience numbers.\n\n### Why did a page report `blocked`?\n\nThe site answered with 401, 403 or 429, or served a recognizable bot-challenge page. A 403 is reported as `blocked`, a 404 as `failed` with `errorCode=not_found`, and 5xx as `failed` with `errorCode=server_error`; the HTTP status is retained even when the body is empty. The actor does not solve CAPTCHAs and does not try to bypass the block. Change the target, test a staging URL, or use a country proxy where appropriate.\n\n### Why is `scrollDepthPercent` missing on some successful pages?\n\nThe page had no measurable scrollable range, scrolling was turned off, or the depth could not be measured. A page with no range is never forced to 100%, but a very short page with a few pixels of overflow can still report 100% because a wheel step reaches its bottom.\n\n### Why is the actual dwell or page count different from what I set?\n\n`dwellSeconds` is a target, not a hard wall. Waiting for an internal click to navigate can make the measured `timeOnPageSec` longer, and `pagesPerVisit` is a maximum: the run's total pageview budget can end a visit before it reaches that maximum. Both the actual dwell and the actual pages are recorded per visit.\n\n### Does it click ads or inflate YouTube views?\n\nNo. It only attempts visible same-site links; ad elements, forms and external links are skipped. YouTube URLs are treated as ordinary pages, and the actor does not generate views.\n\n### What happens if the run is stopped early?\n\nRows already written stay in the dataset. A graceful stop writes `aborted` rows for in-flight visits, writes the latest `SUMMARY`, and sets a partial status such as `Stopped 3/20`. A hard kill can still omit the in-flight row, but the summary is checkpointed after each page.\n\n### Are my saved inputs from the old version still supported?\n\nYes. An input with only `startUrls` is accepted and mapped to `targetUrls`. Legacy `waitOnPage`, `mode=STRESS`, `enableCrawling`/`maxPagesPerUrl`, `enableAdvancedFingerprinting`, `crawlingLinkSelector` and `blockResources` are applied in code, including when the platform supplies the new defaults. `endAfterSeconds` and YouTube mode are ignored with a warning; the run stops after the requested pageviews.\n\n### Is this affiliated with the websites I test?\n\nNo. It is an independent browser automation tool. Use it only on sites you own or have permission to test, and follow their terms and your local laws.\n\n## Limitations\n\n- No login, basic-auth, form submission or file upload.\n- No CAPTCHA solving or guarantee of bypassing bot protection.\n- No ad clicks, ad impressions or YouTube view generation.\n- Mobile and tablet profiles use Android Chromium emulation, not iOS Safari.\n- Direct visits come from the actor's network; some sites will block them. Country visits depend on residential proxy availability.\n- Analytics platforms may filter automated traffic; `analyticsTags` records requests the page made, not hits the platform accepted.\n- Target URLs and redirect destinations are checked against the private/loopback guard before navigation.\n- A hard kill can omit the in-flight page row; graceful stops write `aborted` and a checkpointed summary.\n- The actor does not claim to improve SEO rankings or audience metrics.\n"
    },
    "buildNumber": "1.0.2",
    "imageDigest": "829733583434dc065cdd4c607aed1c1dcce073686c9fedefefb5d3495c6595fa",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.03331777777777778
    }
  }
}