Skip to main content
A browser profile is a snapshot of browser state — cookies, local storage, session data. Create a profile from a completed run, then load it into future workflow runs to skip login and setup steps. For conceptual background, see Browser Profiles.

createBrowserProfile

Create a profile from a completed workflow run.
const profile = await skyvern.createBrowserProfile({
  name: "production-login",
  workflow_run_id: "wr_abc123",
});
console.log(profile.browser_profile_id); // bpf_abc123

Parameters

ParameterTypeRequiredDescription
namestringYesDisplay name for the profile.
descriptionstringNoOptional description.
workflow_run_idstringConditionalThe workflow run ID to snapshot. The run must have used persist_browser_session: true. Required if browser_session_id is not provided.
browser_session_idstringConditionalThe browser session ID to snapshot. Required if workflow_run_id is not provided.
You must provide either workflow_run_id or browser_session_id.

Returns BrowserProfile

FieldTypeDescription
browser_profile_idstringUnique ID. Starts with bpf_.
namestringProfile name.
descriptionstring | undefinedProfile description.
created_atstringWhen the profile was created.

Example: Create a profile from a login workflow

// Step 1: Run a workflow with persist_browser_session
const run = await skyvern.runWorkflow({
  body: {
    workflow_id: "wpid_login_flow",
    parameters: { username: "demo@example.com" },
  },
  waitForCompletion: true,
});

// Step 2: Create a profile from the run
const profile = await skyvern.createBrowserProfile({
  name: "demo-account-login",
  workflow_run_id: run.run_id,
});

// Step 3: Use the profile in future runs (skip login)
const result = await skyvern.runWorkflow({
  body: {
    workflow_id: "wpid_extract_invoices",
    browser_profile_id: profile.browser_profile_id,
  },
  waitForCompletion: true,
});
Session archiving is asynchronous. If createBrowserProfile fails immediately after a workflow completes, wait a few seconds and retry.

listBrowserProfiles

List all browser profiles.
const profiles = await skyvern.listBrowserProfiles({});
for (const p of profiles) {
  console.log(`${p.name} (${p.browser_profile_id})`);
}

Parameters

ParameterTypeRequiredDefaultDescription
include_deletedbooleanNoundefinedInclude soft-deleted profiles in the results.

Returns BrowserProfile[]


getBrowserProfile

Get a single profile by ID.
const profile = await skyvern.getBrowserProfile("bpf_abc123");
console.log(profile.name);

Parameters

ParameterTypeRequiredDescription
profileIdstringYesThe browser profile ID.

Returns BrowserProfile


deleteBrowserProfile

Delete a browser profile.
await skyvern.deleteBrowserProfile("bpf_abc123");

Parameters

ParameterTypeRequiredDescription
profileIdstringYesThe browser profile ID to delete.
browser_profile_id only works with runWorkflow, not runTask. If you pass it to runTask, it will be silently ignored.