Request a Browserbase Demo
Purpose
Fills out the Browserbase "Connect with Browserbase" contact form (/contact) to request a product demo. Populates the seven required fields — first name, last name, company email, job title, company name, the "How can we help?" reason dropdown (set to "I want a demo"), and a "What are you building?" description — then verifies the form is complete and the Submit button is enabled.
This is a write action. Clicking Submit sends a real sales inquiry to Browserbase. Only submit with the user's genuine contact details and only when the user has explicitly asked to send a demo request. The recommended flow fills and verifies the form and pauses at a ready-to-submit state so a human/caller can confirm before the lead is sent.
When to Use
- "Request a demo from Browserbase for me" (with the user's real details).
- "Fill out the Browserbase contact form to book a demo."
- Pre-filling the Browserbase demo/contact form for a sales or BD workflow, stopping for human review before the inquiry is actually sent.
Workflow
The browser is the only path here — there is no public API or deep-link for the demo form. The form uses stable element IDs, so target those directly rather than the brittle XPath/recorder locators.
- Navigate directly to the form. Open
https://www.browserbase.com/contactand wait for the page to load. A bare remote session is sufficient (no proxies, no stealth — see gotchas). You do not need to click the "Get a demo" header link from the homepage; that link just points to/contactanyway.SID=$(browse cloud sessions create --keep-alive | node -e "let s='';process.stdin.on('data',c=>s+=c).on('end',()=>process.stdout.write(JSON.parse(s).id))") export BROWSE_SESSION="$SID" browse open "https://www.browserbase.com/contact" --remote browse wait load --remote browse wait timeout 1500 --remote # form hydrates shortly after load - Fill the five text fields by stable ID selector. Quote any multi-word value.
browse fill "#contactForm-firstName" "John" --remote browse fill "#contactForm-lastName" "Doe" --remote browse fill "#contactForm-email" "jane.doe@acme.com" --remote # must be a company email browse fill "#contactForm-jobTitle" "VP of Engineering" --remote browse fill "#contactForm-companyName" "Acme Corp" --remote - Set the reason dropdown to the demo option. It is a native
<select>— select by its option valuedemo(label "I want a demo"), not by label guesswork.browse select "#contactForm-helpOption" "demo" --remote - Fill the "What are you building?" textarea (required — this field did not exist in older recordings of the form).
browse fill "#contactForm-project" "AI agents that browse the web to automate research workflows" --remote - Verify the pre-submit state. Confirm every required field holds its value and the Submit button is enabled before reporting.
browse eval "JSON.stringify({fn:document.getElementById('contactForm-firstName').value,ln:document.getElementById('contactForm-lastName').value,em:document.getElementById('contactForm-email').value,jt:document.getElementById('contactForm-jobTitle').value,cn:document.getElementById('contactForm-companyName').value,help:document.querySelector('#contactForm-helpOption').value,proj:document.getElementById('contactForm-project').value})" --remote browse screenshot --remote --path ready.png - Stop before Submit unless explicitly instructed to send. If the user has genuinely asked to send the request with their real details, click the Submit button (
form button[type=submit], labeled "Submit") and then read the on-page confirmation/toast to report success. Otherwise report the ready-to-submit state and let a human confirm. - Release the session.
browse cloud sessions update "$SID" --status REQUEST_RELEASE
Site-Specific Gotchas
- Ignore the recorded
/divand/html/body/div[2]/...locators. The original recording is full of noise "Click div. Locator:/div" steps and absolute-path XPaths. The form exposes stable IDs — use them:#contactForm-firstName,#contactForm-lastName,#contactForm-email,#contactForm-jobTitle,#contactForm-companyName,#contactForm-helpOption,#contactForm-project. - The form has grown since the recording. It now has seven required fields, including a
#contactForm-projecttextarea ("What are you building?") that the older recording never mentioned, and the "How can we help?" control is a native<select>(not a custom combobox). All fields are marked required (*); leaving any blank blocks a valid submission. - "How can we help?" is an enum. Valid option values:
demo(I want a demo),verify(Agent Identity's Verified browsers),support(support question),upgrade(upgrade/increase limits),evaluation(evaluate computer-use model),other. For a demo request usedemo. Select by value, not label. - Company email expected. The email field is labeled "COMPANY EMAIL"; free webmail may or may not be accepted by Browserbase's downstream processing — prefer a work-domain address.
- No anti-bot wall. A bare remote Browserbase session loaded and filled the form cleanly across runs; no captcha, no Akamai/Cloudflare challenge. The pre-run probe reported no antibots, confirmed in testing — do not waste a
--verified/--proxiessession on this. - Fast path: go straight to
https://www.browserbase.com/contact. The homepage "Get a demo" link resolves to the same URL, so the homepage hop is unnecessary. Note barebrowserbase.com301-redirects towww.browserbase.com. - Prefer ID selectors over snapshot refs. Accessibility-tree refs (
[3-26]etc.) renumber between snapshots; the#contactForm-*IDs are stable across loads. - WRITE ACTION — do not submit speculatively. Clicking Submit creates a real sales lead. During skill validation the form was filled and verified but never submitted. The Submit button stays enabled; client/server validation is what enforces required fields.
Expected Output
Two outcome shapes depending on whether the caller stops at review or actually submits.
// Filled and verified, paused for human confirmation (default, read-safe)
{
"success": true,
"ready_to_submit": true,
"submitted": false,
"fields": {
"firstName": "John",
"lastName": "Doe",
"email": "jane.doe@acme.com",
"jobTitle": "VP of Engineering",
"companyName": "Acme Corp",
"helpOption": "demo",
"project": "AI agents that browse the web to automate research workflows"
},
"error_reasoning": null
}
// Submitted (only when the user explicitly asked to send with real details)
{
"success": true,
"ready_to_submit": true,
"submitted": true,
"confirmation": "<on-page confirmation text / thank-you message>",
"error_reasoning": null
}
// Could not complete the form (missing/blocked field, page change)
{
"success": false,
"ready_to_submit": false,
"submitted": false,
"error_reasoning": "e.g. #contactForm-project not found — form markup changed"
}