ESG Batch Screenings
This section covers how to create batch jobs for ESG supply chain and portfolio screenings in Briink.
Batch Screenings
Create and manage batch screening jobs to process multiple companies simultaneously, enabling document collection and questionnaire screening at scale.
Overview
Batch screenings allow you to execute screening workflows across multiple companies in a single operation. Each batch job consists of:
- A batch job - The parent container tracking overall progress
- Companies - List of companies to process (1-100 companies per batch)
- Subtasks - Configurable workflow steps executed for each company
Supported Subtask Types
Batch screening jobs support two subtask types that can be combined:
1. Document Collection (document_collection)
document_collection)Automatically discovers and collects relevant ESG documents, websites and files for each company. For example, this process automatically finds and retrieves the company's public annual reports, sustainability reports, and other ESG-related documents from their website and public sources.
Configuration:
subtask_type: Must be"document_collection"redo_document_collection_task(boolean, default:false) - When set totrue, archives all previously collected documents for the companies before running document collection again. This is useful when you want to start a fresh collection for the companies.
Example:
{
"subtask_type": "document_collection",
"redo_document_collection_task": false
}2. Questionnaire Screening (questionnaire_screening)
questionnaire_screening)Screens companies against a specified questionnaire, generating answers based on collected documents. For a more detailed explanation of what a questionnaire is check out our core concepts.
Configuration:
subtask_type: Must be"questionnaire_screening"questionnaire_id: UUID of the questionnaire to use (required)question_ids: Optional list of specific question UUIDs to answer (if null, all questions are answered)min_file_threshold: Minimum number of files required to proceed with screening (default: 5, minimum: 1)
Example:
{
"subtask_type": "questionnaire_screening",
"questionnaire_id": "123e4567-e89b-12d3-a456-426614174000",
"question_ids": null,
"min_file_threshold": 5
}Creating a Batch Screening Job
Endpoint: POST /workspaces/{workspace_id}/batch-screenings
Authentication: Requires platform authentication or Briink API key
Request Body:
{
"companies": [
{
"company_name": "Tesla Inc.",
"custom_id": "PORTFOLIO-001"
},
{
"company_name": "Apple Inc.",
"company_homepage": "apple.com",
"company_location": "California",
"custom_id": "PORTFOLIO-002"
},
{
"company_id": "123e4567-e89b-12d3-a456-426614174001"
}
],
"subtasks": [
{
"subtask_type": "document_collection"
},
{
"subtask_type": "questionnaire_screening",
"questionnaire_id": "123e4567-e89b-12d3-a456-426614174000",
"question_ids": null,
"min_file_threshold": 5
}
],
"name": "Q1 2024 ESG Batch Screening",
"description": "Quarterly ESG assessment for portfolio companies"
}API Reference: For the complete and always up-to-date endpoint specification, see the Batch Screenings API Reference documentation.
Note: Each company must provide either company_id OR company_name. If using company_id, you cannot provide any of company_name,company_homepage, company_location or custom_id.
Note: Custom_id is used to simplify the mapping downstream of the Briink company_id to your custom_id. The custom_id by itself will have no usage in our system.
Note: The company_location field passes location information to improve company identification and enrichment:
- Can include any combination of city, state, address, or country
- Helps disambiguate companies with similar names
- Improves the accuracy of company profile enrichment
Response Schema (Status 202 - Accepted)
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"status": "STARTED",
"total_tasks": 3,
"completed_tasks": 0,
"failed_tasks": 0,
"workspace_id": "123e4567-e89b-12d3-a456-426614174001",
"questionnaire_id": "123e4567-e89b-12d3-a456-426614174002",
"name": "Q1 2024 ESG Batch Screening",
"description": "Quarterly ESG assessment for portfolio companies",
"creator_id": "123e4567-e89b-12d3-a456-426614174003",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z",
"completed_at": null,
"started_tasks": [
{
"id": "task-uuid-1",
"company_id": "company-uuid-1",
"custom_id": "PORTFOLIO-001"
},
{
"id": "task-uuid-2",
"company_id": "company-uuid-2",
"custom_id": "PORTFOLIO-002"
}
]
}Batch Job Status Values
| Status | Description |
|---|---|
STARTED | Initial state, job has been created |
PROCESSING | Job is actively being processed |
COMPLETED | All tasks completed successfully |
FAILED | All tasks failed |
COMPLETED_WITH_FAILURES | Some tasks completed but some tasks failed |
Note on Processing Time: Batch screening jobs are long-running processes, especially when processing a large number of companies or when document collection is enabled. Processing time varies based on:
- Number of companies in the batch
- Enabled subtasks (document collection, questionnaire screening)
- Availability of source documents
Recommended Polling Strategy:
- Poll the batch job status endpoint at reasonable intervals (e.g., every 30-60 seconds)
- Implement exponential backoff for polling to reduce API load
- Monitor individual company subtask statuses for detailed progress tracking
Company Deduplication
When submitting companies by name, Briink automatically performs deduplication to match against existing companies in your workspace. The system analyzes the provided company_name company_location and company_homepage and attempts to map it to known entities in the database using case-insensitive name matching. To bypass deduplication entirely and ensure you're working with a specific existing company, provide the company_id directly instead of using name-based lookup.
Absence of a field is treated as a distinct value — a request that omits company_homepage will only match a record that was also created without a homepage.
Below is a short overview of the scenarios in the table:
| Scenario | Result |
|---|---|
company_id provided | Direct fetch — no deduplication logic |
| Same name + same domain + same location | Returns existing company |
| Same name + same domain + no location | New company (distinct from one with a location) |
| Same name + different domain | New company |
| Same input, re-run after AI enrichment | Returns existing company — dedup keys are never modified by AI |
Note: If two companies are provided within a single batch job request that map to the same company entity the response will include the same task_id reference for this entity. If a company input contained a custom_id this will also be referred back to the caller.
Updating Batch Screening Job Metadata
Endpoint: PUT /workspaces/{workspace_id}/batch-screenings/{batch_job_id}
Authentication: Requires platform authentication or Briink API key
Update the name and/or description of an existing batch screening job.
Request Body:
{
"name": "Updated Q1 2024 ESG Batch Screening",
"description": "Updated: Quarterly ESG assessment including climate risk"
}Note: At least one field must be provided.
Response Schema
Returns the updated batch job object (same schema as creation response).
Updating Batch Screening Job Subtasks
Endpoint: POST /workspaces/{workspace_id}/batch-screenings/{batch_job_id}/subtasks
Authentication: Requires platform authentication or Briink API key
Update or replace the subtasks configuration for all tasks in a batch screening job. This allows you to modify the workflow steps (document collection, questionnaire screening) for the entire batch. This will retrigger all tasks, even if they previously have been completed, e.g. if a single task has already had the subtask questionnaire_screening it would be triggered again.
Request Body:
{
"subtasks": [
{
"subtask_type": "document_collection"
},
{
"subtask_type": "questionnaire_screening",
"questionnaire_id": "123e4567-e89b-12d3-a456-426614174000",
"question_ids": ["789e4567-e89b-12d3-a456-426614174000"],
"min_file_threshold": 3
}
]
}Note: The subtasks array must contain at least one subtask configuration. Each subtask follows the same schema as during batch job creation.
Response Schema
Returns the updated batch job object (same schema as creation response).
Python SDK Example
from briink_sdk import BriinkClient
from uuid import UUID
client = BriinkClient(api_key="your-api-key")
# Create a batch screening job
batch_job = client.batch_screenings.create(
workspace_id=UUID("your-workspace-id"),
companies=[
{
"company_name": "Tesla Inc.",
"company_homepage": "tesla.com"
},
{
"company_id": UUID("existing-company-id")
}
],
subtasks=[
{
"subtask_type": "document_collection",
},
{
"subtask_type": "questionnaire_screening",
"questionnaire_id": UUID("your-questionnaire-id"),
"min_file_threshold": 5
}
],
name="ESG Batch Assessment",
description="Q1 2024 portfolio screening"
)
print(f"Batch job created: {batch_job.id}")
print(f"Status: {batch_job.status}")
print(f"Total tasks: {batch_job.total_tasks}")
# Update batch job metadata
updated_job = client.batch_screenings.update(
workspace_id=UUID("your-workspace-id"),
batch_job_id=batch_job.id,
name="Updated ESG Assessment",
description="Expanded scope to include climate risk"
)
# Update batch job subtasks
updated_job = client.batch_screenings.update_subtasks(
workspace_id=UUID("your-workspace-id"),
batch_job_id=batch_job.id,
subtasks=[
{
"subtask_type": "questionnaire_screening",
"questionnaire_id": UUID("your-questionnaire-id"),
"question_ids": [UUID("specific-question-id")],
"min_file_threshold": 3
}
]
)Best Practices
-
Company Identification: When you have an existing
company_id, use it directly for faster processing and guaranteed accuracy. Usecompany_name+company_homepagewhen creating new companies to ensure proper deduplication. -
Subtask Ordering: The subtask
document_collectionwill always be performed beforequestionnaire_screeningif both are provided to ensure documents are collected before screening begins. Both subtasks can be triggered by themselves as well. -
Batch Size: Currently batches are limited to 100 companies at once, please reach out to us if you require a higher limit.
-
Question Filtering: Use
question_idswhen you only need answers to specific questions, reducing processing time and cost.
Additional Endpoints
For retrieving, listing, and managing batch screening jobs, see:
GET /workspaces/{workspace_id}/batch-screenings- List all batch jobsGET /workspaces/{workspace_id}/batch-screenings/{batch_job_id}- Get specific batch job with tasksGET /workspaces/{workspace_id}/batch-screenings/{batch_job_id}/{batch_job_task_id}- Get specific task detailsDELETE /workspaces/{workspace_id}/batch-screenings/{batch_job_id}- Delete a batch job
Updated 1 day ago
Follow our quick start integration guide for this use-case here to get started: