Scrapes Adobe Creative Cloud “All Apps” pricing for a list of regions using the Python Apify SDK and Selenium. Runners (local, Apify platform, or n8n) supply a JSON payload and the actor writes one record per region to the default Apify dataset.
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txtBy default the actor uses webdriver-manager to download a matching ChromeDriver binary. For offline/local development you can install ChromeDriver yourself (e.g. brew install --cask chromedriver) and pass its path via the chromedriverPath input or a CHROMEDRIVER_PATH environment variable.
-
Update
apify_storage/key_value_stores/default/INPUT.jsonwith the regions you want to test. -
Run the actor:
# Using the Apify CLI (mirrors the platform) apify run # Or directly python src/main.py
-
Inspect results:
apify datasets get-items --datasetId default
The dataset export files also live in
apify_storage/datasets/default.
apify login
apify pushDefine default inputs in the Apify console using INPUT_SCHEMA.json to guide manual runs and n8n payload validation.
- Gather region data (from Notion or another source) and build the JSON payload described below.
- Trigger this actor with Apify → Run Actor (or an HTTP node calling the Apify API), passing the JSON as
INPUT. - Await run completion and fetch results via Apify → Get Dataset Items.
- Map each dataset item into Notion using the Notion nodes of your workflow.
{
"regions": [
{
"region_code": "us",
"region_name": "United States",
"href": "https://www.adobe.com/creativecloud/plans.html"
}
],
"delayBetweenItemsSecs": 0,
"requestTimeoutSecs": 60,
"headless": true,
"chromedriverPath": "/usr/local/bin/chromedriver",
"chromeBinaryPath": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
}hrefis optional; the actor falls back tohttps://www.adobe.com/{region_code}/creativecloud/plans.html.delayBetweenItemsSecsintroduces a pause after each region to reduce the risk of throttling.requestTimeoutSecscontrols Selenium’s waits for price elements.headlesslets you flip a headed Chrome window on for debugging (false).chromedriverPath(optional) points to a pre-installed ChromeDriver binary; when omitted the actor falls back towebdriver-manager(needs network access).chromeBinaryPath(optional) sets the Chrome executable explicitly if it is not in the default location.
Each output record contains product, region, region_name, currency, amount, period, timestamp, success, and optional error when scraping fails—making downstream Notion updates straightforward.