https://demo.openemr.io/openemr/index.php:
- Patient demographics from Patient/Client > Finder
- Encounter billing data from Reports > Visits > Superbill
admin / pass (resets daily at 8:00 AM UTC)
Prerequisites
- A Skyvern Cloud account or self-hosted deployment
- The Skyvern SDK (for API usage)
Why a single task isn’t enough
A basic task pointed at OpenEMR with a vague prompt will partially work, but hits four problems in production:| Problem | Impact |
|---|---|
| No proxy | Production EHR portals sit behind WAFs that block datacenter IPs |
| Login every run | Wastes steps, fragile with session complexity |
| Vague navigation | OpenEMR uses iframes and dynamic menus — needs explicit goals |
| No pagination | Only gets page 1 of multi-page results |
Residential proxies
Route the browser through a residential IP to bypass WAF/bot detection. The demo works without one, but production portals require it.- Cloud UI
- API / SDK
In the run panel, expand Advanced Settings and set Proxy Location to a country (e.g., United States).
Browser profiles
Log in once, save the browser state as a profile, and skip login on future runs.- Cloud UI
- API / SDK
Create a login workflow
Go to Workflows in the sidebar and create a new workflow. Add a Navigation block with URL
https://demo.openemr.io/openemr/index.php and goal: “Log in with username ‘admin’ and password ‘pass’. Confirm the Calendar page loads.”On the Start node, expand the settings and enable Save & Reuse Session. Set Proxy Location to a country (e.g., United States).persist_browser_session is a workflow definition property — set it when creating the workflow, not when running it. See Browser Profiles for the full lifecycle.Extract patient demographics
Navigate to Patient/Client > Finder and extract the results table.- Cloud UI
- API / SDK
Create a workflow with two blocks:
- Navigation block — URL:
https://demo.openemr.io/openemr/index.php. Goal: “Click Patient/Client in the top menu, then click Finder. Click Search to display all patients.” - Extraction block — Goal: “Extract all patient rows from the Patient Finder results table.” Paste the patient schema into Data Schema.
The demo resets daily and community users add test patients, so exact records may differ.
Browser profiles cannot be used directly with standalone tasks. Create a browser session from the profile first, then pass the session ID. See Pagination with browser sessions below for the full pattern.
Extract encounter billing data
Navigate to Reports > Visits > Superbill, set a date range, and extract the report.- Cloud UI
- API / SDK
Create a workflow with two blocks:
- Navigation block — Goal: “Click Reports in the top menu, then Visits, then Superbill. Set the From date to 2020-01-01 and the To date to today. Click Submit.”
- Extraction block — Goal: “Extract all encounter rows from the Superbill report.” Paste the encounter schema into Data Schema.
Pagination with browser sessions
A Browser Profile is a saved snapshot. A Browser Session is a live browser instance that persists between tasks. Use sessions to paginate: extract page 1, click Next, extract page 2.- Cloud UI
- API / SDK
Create a session
Go to Browsers in the sidebar. Click Create Session. Set Proxy Location to a country (e.g., United States) and configure the timeout.
Navigate and extract page 1
Run a task against the session: “Click Patient/Client > Finder. Click Search. Extract all patient rows.”
Error handling
OpenEMR can timeout or show session-expired pages. Useerror_code_mapping on workflow blocks to classify failures, and max_retries to retry automatically.
- Cloud UI
- API / SDK
On each Navigation and Extraction block, expand Advanced Settings and enable Error Messages. Add this JSON:
max_retries is only available via the API. In the Cloud UI, Skyvern uses its default retry behavior. For fine-grained retry control, use the API/SDK approach.Complete workflow
This workflow combines everything: navigate to the Patient Finder, extract demographics, navigate to Superbill, and extract billing data — with error recovery and residential proxy.- Cloud UI
- API / SDK
Create the workflow
Go to Workflows and create a new workflow named “OpenEMR Daily Extract.” On the Start node, enable Save & Reuse Session and set Proxy Location to a country (e.g., United States).
Block 1: Navigation — open Patient Finder
Add a Navigation block. Set URL to
https://demo.openemr.io/openemr/index.php and goal: “Click Patient/Client > Finder. Click Search to display all patients. If a login page appears, log in with ‘admin’/‘pass’.” In Advanced Settings, enable Error Messages and add {"session_expired": "Session expired, login required, or access denied page"}.Block 2: Extraction — patient demographics
Add an Extraction block. Set goal: “Extract all patient rows from the Patient Finder results table.” Paste the patient schema into Data Schema.
Block 3: Navigation — open Superbill
Add another Navigation block. Set goal: “Click Reports > Visits > Superbill. Set From to 2020-01-01, To to today. Click Submit.” Add the same error messages mapping.
Block 4: Extraction — encounter billing
Add another Extraction block. Set goal: “Extract all encounter rows from the Superbill report.” Paste the encounter schema into Data Schema.
| Technique | Purpose |
|---|---|
| Residential proxy | Bypass WAF/bot detection |
| Browser profile | Skip login on every run |
| Navigation goals | Explicit menu clicks for iframe-based UI |
| JSON schemas | Consistent, structured output |
| Session reuse | Paginate multi-page results |
| Error mapping + retries | Recover from session timeouts |
Resources
Browser Profiles
Full lifecycle: create, refresh, and delete saved browser state
Proxy & Geolocation
All proxy locations and country-specific routing options
Credential Management
Securely store and use login credentials
Error Handling
Error code mapping, failure classification, and retry strategies
Extract Structured Data
JSON schema design and the interactive schema builder

