Skip to main content
For AI agents: a documentation index is available at https://docs.parallel.ai/llms.txt. The full text of all docs is at https://docs.parallel.ai/llms-full.txt. You may also fetch any page as Markdown by appending .md to its URL or sending Accept: text/markdown.
This integration is ideal for data engineers and analysts who work with DuckDB and need to enrich data with web intelligence directly in their SQL or Python workflows. Parallel provides a native DuckDB integration with two approaches: batch processing for efficiency, and SQL UDFs for flexibility.
View the complete demo notebook:

Features

  • Batch Processing: Process all rows in parallel with a single API call (recommended)
  • SQL UDF: Use parallel_enrich() directly in SQL queries
  • Progress Callbacks: Track enrichment progress for large datasets
  • Permanent Tables: Optionally save results to a new table

Installation

Or with all dependencies:

Basic Usage - Batch Processing

Batch processing is the recommended approach for enriching multiple rows efficiently.
Output:

Function Parameters

Return Value

The function returns an EnrichmentResult dataclass:

Column Name Mapping

Output column descriptions are automatically converted to valid SQL identifiers. Field names are converted to snake_case:

SQL Query as Source

You can pass a SQL query instead of a table name:

Creating Permanent Tables

Save enriched results to a permanent table:

Progress Tracking

Track progress for large enrichment jobs:

SQL UDF Usage

For flexibility in SQL queries, you can register a parallel_enrich() function:
The SQL UDF processes rows individually. For better performance with multiple rows, use batch processing with enrich_table().

Including Citations

Processor Selection

Choose a processor based on your speed vs thoroughness requirements. See Choose a Processor for detailed guidance and Pricing for cost information.

Best Practices

Batch processing is significantly faster (4-5x or more) than the SQL UDF for multiple rows:
Be specific in your output column descriptions for better results:
Errors don’t stop processing - partial results are returned:
  • Use lite-fast for high-volume, basic enrichments
  • Test with small batches before processing large tables
  • Store results in permanent tables to avoid re-enriching