@crawlee/stagehand
Provides AI-powered web crawling using Stagehand for natural language browser automation. The enhanced page object offers page.act() to perform actions with plain English, page.extract() to get structured data with Zod schemas, and page.observe() to discover available actions.
Since StagehandCrawler uses AI models for page interaction, it is useful for crawling websites with complex or frequently changing layouts where traditional CSS selectors are difficult to maintain. If the target website has a stable structure, consider using PlaywrightCrawler, which is faster and doesn't require AI API keys.
The crawler extends BrowserCrawler and supports all standard Crawlee features including request queues, proxy rotation, autoscaling, and browser fingerprinting.
API Key Configuration
The apiKey option is interpreted based on the env setting:
env: 'LOCAL'(default):apiKeyis the LLM provider key (OpenAI, Anthropic, or Google)env: 'BROWSERBASE':apiKeyis the Browserbase API key
const crawler = new StagehandCrawler({
stagehandOptions: {
model: 'openai/gpt-4.1-mini',
apiKey: 'your-api-key', // LLM API key for LOCAL env
},
// ...
});
Alternatively, you can use environment variables (used as fallback when apiKey is not provided):
- OpenAI:
OPENAI_API_KEY - Anthropic:
ANTHROPIC_API_KEY - Google:
GOOGLE_API_KEY
Example usage
import { StagehandCrawler } from '@crawlee/stagehand';
import { z } from 'zod';
const crawler = new StagehandCrawler({
stagehandOptions: {
model: 'openai/gpt-4.1-mini',
},
async requestHandler({ page, request, log }) {
log.info(`Processing ${request.url}`);
// Use natural language to interact with the page
await page.act('Click the "Load More" button');
// Extract structured data with AI
const data = await page.extract(
'Get all product names and prices',
z.object({
products: z.array(z.object({
name: z.string(),
price: z.number(),
})),
}),
);
log.info(`Found ${data.products.length} products`);
},
});
await crawler.run(['https://example.com']);
Index
Browser management
Other
- AddRequestsBatchedOptions
- AddRequestsBatchedResult
- ApifyLogAdapter
- ArgumentValidationError
- assertBrowserPoolNotConfigured
- BaseCrawleeLogger
- BasicCrawler
- BasicCrawlerOptions
- BasicCrawlingContext
- BLOCKED_STATUS_CODES
- BrowserCrawler
- BrowserCrawlerOptions
- BrowserCrawlingContext
- BrowserHook
- BrowserLaunchContext
- CalculatedStatistics
- coerceBoolean
- coerceNumber
- ConcurrencyConsumer
- ConcurrencySystem
- ConcurrencySystemOptions
- ConfigField
- Configuration
- ConfigurationInput
- ConfigurationOptions
- ContextMiddleware
- ContextPipeline
- ContextPipelineCleanupError
- ContextPipelineInitializationError
- ContextPipelineInterruptedError
- CpuLoadSignal
- CpuLoadSignalOptions
- crawleeConfigFields
- CrawleeLogger
- CrawleeLoggerOptions
- CrawlerAddRequestsOptions
- CrawlerAddRequestsResult
- CrawlerRunOptions
- CrawlingContext
- createBasicRouter
- CreateContextOptions
- CreateSession
- createStorageTransaction
- CriticalError
- Dataset
- DatasetConsumer
- DatasetContent
- DatasetDataOptions
- DatasetExportOptions
- DatasetExportToOptions
- DatasetIteratorOptions
- DatasetJournalEntry
- DatasetMapper
- DatasetOptions
- DatasetReducer
- DatasetStats
- defaultRoute
- DefaultRouteUserData
- DefaultStorageIdentifier
- EnqueueLinksOptions
- EnqueueStrategy
- EnqueueStrategyOption
- EnqueueUrlsOptions
- ErrnoException
- ErrorHandler
- ErrorSnapshotter
- ErrorTracker
- ErrorTrackerOptions
- EventLoopLoadSignal
- EventLoopLoadSignalOptions
- EventManager
- EventManagerOptions
- EventStatusMessageData
- EventType
- EventTypeName
- ExplicitStorageIdentifier
- ExtractLinksOptions
- field
- FieldsInput
- FieldsOutput
- FinalStatistics
- GetUserDataFromRequest
- GlobInput
- GlobObject
- IConcurrencySystem
- IProxyConfiguration
- IRequestLoader
- IRequestManager
- IStatistics
- IStorage
- JournaledRequest
- JournalEntry
- KeyConsumer
- KeyValueStore
- KeyValueStoreIteratorOptions
- KeyValueStoreJournalEntry
- KeyValueStoreOptions
- KeyValueStoreRawRecord
- KeyValueStoreStats
- LabeledSource
- LauncherBrowserPoolOptions
- LauncherRemoteBrowserPoolOptions
- LoadedRequest
- LoadSignal
- LoadSignalInfo
- LoadSignalsOptions
- LoadSignalStartContext
- LoadSnapshot
- LocalEventManager
- LocalEventManagerOptions
- log
- Log
- Logger
- LoggerJson
- LoggerOptions
- LoggerText
- LogLevel
- MAX_POOL_SIZE
- MemoryLoadSignal
- MemoryLoadSignalOptions
- MemoryStorageBackend
- MemoryStorageOptions
- MissingSessionError
- NavigationSkippedError
- NonRetryableError
- OwnedBrowserPool
- PacingScope
- PacingSignal
- parseRetryAfterHeader
- parseValue
- PERSIST_STATE_KEY
- PersistenceOptions
- PersistentRateLimitError
- ProxyConfiguration
- ProxyConfigurationFunction
- ProxyConfigurationOptions
- purgeDefaultStorages
- PushErrorMessageOptions
- RecordOptions
- RecoverableState
- RecoverableStateOptions
- RecoverableStatePersistenceOptions
- RegExpInput
- RegExpObject
- Request
- RequestHandler
- RequestHandlerError
- RequestList
- RequestListOptions
- RequestListSourcesFunction
- RequestListState
- RequestLoaderStatus
- RequestManagerOpener
- RequestManagerTandem
- RequestOptions
- RequestQueue
- RequestQueueJournalEntry
- RequestQueueOperationInfo
- RequestQueueOperationOptions
- RequestQueueOptions
- RequestQueueStats
- RequestsLike
- RequestSourceStatus
- RequestState
- RequestThrottledError
- RequestTransform
- RequestValidationError
- RequireContextPipeline
- ResolvedConfigValues
- resolveStorageIdentifier
- ResponseLike
- RestrictedCrawlingContext
- RetryRequestError
- RouteOptions
- Router
- RouterHandler
- RouterHandlerContext
- RouterLabel
- RouterRoutes
- RouteSchemas
- RoutesFromSchemas
- SchemaIssue
- serializeValue
- ServiceConflictError
- serviceLocator
- ServiceLocator
- Session
- SessionError
- SessionOptions
- SessionPool
- SessionPoolOptions
- SessionReuseStrategy
- SitemapRequestLoader
- SitemapRequestLoaderOptions
- SkippedRequestCallback
- SkippedRequestReason
- SnapshotResult
- SnapshotStore
- Source
- StateConversion
- StateValidationError
- StatisticPersistedState
- Statistics
- StatisticsOptions
- StatisticState
- StatisticStateExtensionOptions
- StatusMessageCallback
- StatusMessageCallbackParams
- StorageBackend
- StorageBackendLoadSignal
- StorageBackendLoadSignalOptions
- StorageIdentifier
- StorageInstanceManager
- StorageOpenOptions
- StorageStatsTracker
- StorageTransaction
- StorageTransactionOptions
- StorageTransactionState
- StorageTransactionView
- StorageWriteMode
- StorageWritePolicy
- SyncStateConversion
- SystemInfo
- TaskLoopOptions
- TaskLoopPredicates
- ThrottlingRequestManager
- ThrottlingRequestManagerOptions
- TypedContextAddRequests
- TypedContextEnqueueLinks
- UrlPatternInput
- UrlPatternObject
- useState
- UseStateOptions
- withDirectStorageAccess
- WithRequired
- withStorageTransaction
- stagehandUtils
- Stagehand
- StagehandCrawler
- Action
- ActOptions
- ActResult
- AgentResult
- ExtractOptions
- ObserveOptions
- RemoteStagehandBrowserPoolOptions
- StagehandBrowserPoolOptions
- StagehandCrawlerOptions
- StagehandCrawlingContext
- StagehandLaunchContext
- StagehandOptions
- StagehandPage
- StagehandRequestHandler
- AgentConfig
- ModelConfiguration
- StagehandBrowserPool
- StagehandGotoOptions
- StagehandHook
- createStagehandRouter
Other
AddRequestsBatchedOptions
AddRequestsBatchedResult
ApifyLogAdapter
ArgumentValidationError
assertBrowserPoolNotConfigured
BaseCrawleeLogger
BasicCrawler
BasicCrawlerOptions
BasicCrawlingContext
BLOCKED_STATUS_CODES
BrowserCrawler
BrowserCrawlerOptions
BrowserCrawlingContext
BrowserHook
BrowserLaunchContext
CalculatedStatistics
coerceBoolean
coerceNumber
ConcurrencyConsumer
ConcurrencySystem
ConcurrencySystemOptions
ConfigField
Configuration
ConfigurationInput
ConfigurationOptions
ContextMiddleware
ContextPipeline
ContextPipelineCleanupError
ContextPipelineInitializationError
ContextPipelineInterruptedError
CpuLoadSignal
CpuLoadSignalOptions
crawleeConfigFields
CrawleeLogger
CrawleeLoggerOptions
CrawlerAddRequestsOptions
CrawlerAddRequestsResult
CrawlerRunOptions
CrawlingContext
createBasicRouter
CreateContextOptions
CreateSession
createStorageTransaction
CriticalError
Dataset
DatasetConsumer
DatasetContent
DatasetDataOptions
DatasetExportOptions
DatasetExportToOptions
DatasetIteratorOptions
DatasetJournalEntry
DatasetMapper
DatasetOptions
DatasetReducer
DatasetStats
defaultRoute
DefaultRouteUserData
DefaultStorageIdentifier
EnqueueLinksOptions
EnqueueStrategy
EnqueueStrategyOption
EnqueueUrlsOptions
ErrnoException
ErrorHandler
ErrorSnapshotter
ErrorTracker
ErrorTrackerOptions
EventLoopLoadSignal
EventLoopLoadSignalOptions
EventManager
EventManagerOptions
EventStatusMessageData
EventType
EventTypeName
ExplicitStorageIdentifier
ExtractLinksOptions
field
FieldsInput
FieldsOutput
FinalStatistics
GetUserDataFromRequest
GlobInput
GlobObject
IConcurrencySystem
IProxyConfiguration
IRequestLoader
IRequestManager
IStatistics
IStorage
JournaledRequest
JournalEntry
KeyConsumer
KeyValueStore
KeyValueStoreIteratorOptions
KeyValueStoreJournalEntry
KeyValueStoreOptions
KeyValueStoreRawRecord
KeyValueStoreStats
LabeledSource
LauncherBrowserPoolOptions
LauncherRemoteBrowserPoolOptions
LoadedRequest
LoadSignal
LoadSignalInfo
LoadSignalsOptions
LoadSignalStartContext
LoadSnapshot
LocalEventManager
LocalEventManagerOptions
log
Log
Logger
LoggerJson
LoggerOptions
LoggerText
LogLevel
MAX_POOL_SIZE
MemoryLoadSignal
MemoryLoadSignalOptions
MemoryStorageBackend
MemoryStorageOptions
MissingSessionError
NavigationSkippedError
NonRetryableError
OwnedBrowserPool
PacingScope
PacingSignal
parseRetryAfterHeader
parseValue
PERSIST_STATE_KEY
PersistenceOptions
PersistentRateLimitError
ProxyConfiguration
ProxyConfigurationFunction
ProxyConfigurationOptions
purgeDefaultStorages
PushErrorMessageOptions
RecordOptions
RecoverableState
RecoverableStateOptions
RecoverableStatePersistenceOptions
RegExpInput
RegExpObject
Request
RequestHandler
RequestHandlerError
RequestList
RequestListOptions
RequestListSourcesFunction
RequestListState
RequestLoaderStatus
RequestManagerOpener
RequestManagerTandem
RequestOptions
RequestQueue
RequestQueueJournalEntry
RequestQueueOperationInfo
RequestQueueOperationOptions
RequestQueueOptions
RequestQueueStats
RequestsLike
RequestSourceStatus
RequestState
RequestThrottledError
RequestTransform
RequestValidationError
RequireContextPipeline
ResolvedConfigValues
resolveStorageIdentifier
ResponseLike
RestrictedCrawlingContext
RetryRequestError
RouteOptions
Router
RouterHandler
RouterHandlerContext
RouterLabel
RouterRoutes
RouteSchemas
RoutesFromSchemas
SchemaIssue
serializeValue
ServiceConflictError
serviceLocator
ServiceLocator
Session
SessionError
SessionOptions
SessionPool
SessionPoolOptions
SessionReuseStrategy
SitemapRequestLoader
SitemapRequestLoaderOptions
SkippedRequestCallback
SkippedRequestReason
SnapshotResult
SnapshotStore
Source
StateConversion
StateValidationError
StatisticPersistedState
Statistics
StatisticsOptions
StatisticState
StatisticStateExtensionOptions
StatusMessageCallback
StatusMessageCallbackParams
StorageBackend
StorageBackendLoadSignal
StorageBackendLoadSignalOptions
StorageIdentifier
StorageInstanceManager
StorageOpenOptions
StorageStatsTracker
StorageTransaction
StorageTransactionOptions
StorageTransactionState
StorageTransactionView
StorageWriteMode
StorageWritePolicy
SyncStateConversion
SystemInfo
TaskLoopOptions
TaskLoopPredicates
ThrottlingRequestManager
ThrottlingRequestManagerOptions
TypedContextAddRequests
TypedContextEnqueueLinks
UrlPatternInput
UrlPatternObject
useState
UseStateOptions
withDirectStorageAccess
WithRequired
withStorageTransaction
externalAgentConfig
Type declaration
externaloptionalcua?: boolean
Deprecated - Use
mode: "cua"instead. This option will be removed in a future version. Enables Computer Use Agent (CUA) mode.externaloptionalexecutionModel?: string | AgentModelConfig<string>
The model to use for tool execution (observe/act calls within agent tools). If not specified, inherits from the main model configuration. Format: "provider/model" (e.g., "openai/gpt-4o-mini", "google/gemini-2.0-flash-exp")
externaloptionalintegrations?: (Client | string)[]
MCP integrations - Array of Client objects
externaloptionalmode?: AgentToolMode
Tool mode for the agent. Determines which set of tools are available.
- 'dom' (default): Uses DOM-based tools (act, fillForm) for structured interactions
- 'hybrid': Uses coordinate-based tools (click, type, dragAndDrop, clickAndHold, fillFormVision) for visual/screenshot-based interactions
- 'cua': Uses Computer Use Agent (CUA) providers for screenshot-based automation
externaloptionalmodel?: string | AgentModelConfig<string>
The model to use for agent functionality
externaloptionalstream?: boolean
Enable streaming mode for the agent. When true, execute() returns AgentStreamResult with textStream for incremental output. When false (default), execute() returns AgentResult after completion.
externaloptionalsystemPrompt?: string
Custom system prompt to provide to the agent. Overrides the default system prompt.
externaloptionaltools?: ToolSet
Tools passed to the agent client
externalModelConfiguration
StagehandBrowserPool
A BrowserPool of Stagehand browsers, as built by stagehandBrowserPool.
StagehandGotoOptions
Goto options for StagehandCrawler navigation.
AI-powered web crawling with Stagehand integration for Crawlee.
This package provides StagehandCrawler, which extends BrowserCrawler with natural language browser automation capabilities powered by Browserbase's Stagehand library.
Key Features
page.act()to perform actions with plain English instructionspage.extract()with Zod schemas for type-safe data extractionpage.observe()to get AI-suggested actionspage.agent()for complex multi-step workflows