ARTICLE AD BOX
I'm building an automated job application system. When a user clicks "Auto Apply" on an Adzuna job listing, my backend needs to follow the redirect chain to the actual employer application form and fill it out automatically.
Adzuna job listings follow this redirect chain:
https://www.adzuna.com.au/details/{id} ← job listing (loads fine) → https://www.adzuna.com.au/land/ad/{id} ← tracking redirect (BOT BLOCKED) → https://click.appcast.io/t/{token} ← appcast tracking → https://hatch.team/job/{slug} ← employer platform → https://jobs.ashbyhq.com/{company}/{id}/application ← actual formWhat works:
Navigating to the Adzuna details page with Playwright — works fine
Extracting the land/ad/ URL from the Apply button — works fine
Following the full chain with Firecrawl (stealth proxy) — resolves correctly to the final Ashby ATS URL
What fails: Every method I try to resolve land/ad/ returns an "Access Denied" page served by Adzuna itself (not Cloudflare — it's an Adzuna-branded error page):
<title>Access Denied</title> <link rel="stylesheet" href="//zunastatic-abf.kxcdn.com/css/..."/>Attempts so far:
Playwright .goto(land_url) — "Access Denied" (200 OK, bot detected)
httpx with browser-like headers:
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...", "Accept": "text/html,application/xhtml+xml,...", "Accept-Language": "en-AU,en;q=0.9", "Referer": "https://www.adzuna.com.au/", } async with httpx.AsyncClient(headers=headers, follow_redirects=True) as client: r = await client.get(land_url) # r.url is still adzuna.com/land/ad/... — "Access Denied"httpx with Playwright's session cookies + correct Referer (the details page was loaded by Playwright so it has valid session cookies):
pw_cookies = await page.context.cookies() session_cookies = {c["name"]: c["value"] for c in pw_cookies if "adzuna" in c["domain"]} # Still "Access Denied"Anti-detection in Playwright context:
browser = await pw.chromium.launch(args=[ "--disable-blink-features=AutomationControlled", ]) context = await browser.new_context(user_agent="...", locale="en-AU") await context.add_init_script("Object.defineProperty(navigator,'webdriver',{get:()=>undefined})") # Details page still loads fine, but land/ad/ still blocksHow do I resolve the Adzuna land/ad/ redirect programmatically without a human browser? Specifically:
Is this TLS fingerprinting (JA3/JA4) — would curl_cffi with impersonate="chrome124" help?
Is there another way to get the final employer URL from the Adzuna details page HTML/API without going through land/ad/ at all?
Does anyone know if Adzuna exposes the destination URL anywhere (JSON-LD, data attributes, XHR response) on the details page?
Environment: Python 3.11, Playwright 1.44, httpx 0.27, running headless on Windows Server / local dev.
