Skip to main content

Batch Result

Retrieves the enriched contact data for a previously submitted batch request from Dropcontact.

Common Properties

  • Name - The custom name of the node.
  • Color - The custom color of the node.
  • Delay Before (sec) - Waits in seconds before executing the node.
  • Delay After (sec) - Waits in seconds after executing node.
  • Continue On Error - Automation will continue regardless of any error. The default value is false.
info

If the ContinueOnError property is true, no error is caught when the project is executed, even if a Catch node is used.

Inputs

  • Request ID - The request ID string returned from the Batch Post node. This identifies which batch results to retrieve.

Options

  • API Key - Dropcontact API key for authentication (credential type).

Output

  • result - An object containing the enriched contact data returned by Dropcontact, including email addresses, phone numbers, company information, and other enriched fields.

How It Works

The Batch Result node retrieves enrichment results for a previously submitted batch. When executed, the node:

  1. Validates the request ID is not empty
  2. Constructs a GET request to the Dropcontact API endpoint
  3. Adds authentication headers with the API key
  4. Sends the request to https://api.dropcontact.io/batch/{request_id}
  5. Parses the JSON response containing enriched contact data
  6. Returns the complete result object

Requirements

  • A valid Dropcontact account with API access
  • API key configured in credentials
  • A valid request ID from a previous Batch Post operation
  • Sufficient time elapsed for Dropcontact to process the batch (typically 30-60 seconds)

Error Handling

The node will return specific errors in the following cases:

  • ErrInvalidArg - Request ID is empty or missing
  • ErrCredentials - Failed to retrieve API key from credentials
  • ErrInternal - Failed to create HTTP request
  • ErrRuntime - Failed to send request or parse response

Usage Notes

  • Wait at least 30-60 seconds after submitting a batch before retrieving results
  • The result object includes processing status information
  • You can poll this node multiple times with the same request ID
  • Results remain available for retrieval for a reasonable time period
  • The API may return partial results if processing is still in progress
  • Check the response status to determine if processing is complete

Result Object Structure

The result object contains comprehensive enriched data for all contacts in the batch:

{
"success": true,
"error": false,
"request_id": "abc123def456",
"total_count": 3,
"processed_count": 3,
"data": [
{
"civility": "M",
"first_name": "John",
"last_name": "Doe",
"full_name": "John Doe",
"email": [
{
"email": "john.doe@acmecorp.com",
"qualification": "verified",
"is_the_most_complete_email": true
}
],
"phone": "+1234567890",
"mobile_phone": "+1987654321",
"company": "Acme Corp",
"website": "https://acmecorp.com",
"linkedin": "https://www.linkedin.com/in/johndoe/",
"company_linkedin": "https://www.linkedin.com/company/acme-corp/",
"nb_employees": "51-200",
"siren": "123456789",
"siret": "12345678900012",
"naf5_code": "6201Z",
"company_country": "United States",
"company_city": "New York",
"company_address": "123 Main Street",
"job_title": "Senior Product Manager"
}
]
}

Response Fields

Top-level Fields:

  • success - Boolean indicating if the request was successful
  • error - Boolean indicating if errors occurred
  • request_id - The original request ID
  • total_count - Total number of contacts in the batch
  • processed_count - Number of contacts processed so far
  • data - Array of enriched contact objects

Contact Object Fields:

  • civility - Title (M, Ms, etc.)
  • first_name - Verified first name
  • last_name - Verified last name
  • full_name - Complete name
  • email - Array of email objects with qualification status
  • phone - Company phone number
  • mobile_phone - Mobile phone number
  • company - Verified company name
  • website - Company website URL
  • linkedin - Contact's LinkedIn profile
  • company_linkedin - Company's LinkedIn page
  • nb_employees - Employee count range
  • siren/siret - French company identifiers (if requested)
  • naf5_code - French business activity code
  • company_country - Company headquarters country
  • company_city - Company city
  • company_address - Company address
  • job_title - Contact's job position

Example: Basic Result Retrieval

Input:

request_id: "abc123def456ghi789jkl"

Flow Setup:

  1. Batch Post node submits contacts and outputs request_id
  2. Delay node waits 45 seconds
  3. Batch Result node retrieves enriched data
  4. Log node displays the results

Output: The result object containing all enriched contact information for the submitted batch.

Example: Processing Loop with Status Check

This example shows how to poll for results until processing is complete:

1. Batch Post → Store request_id in variable
2. Delay 30 seconds
3. Loop Start (max 10 iterations)
├─ Batch Result → Get results
├─ Check if processed_count = total_count
├─ If complete → Break loop
└─ If not → Delay 15 seconds, continue loop
4. Process enriched data

Tips:

  • Check processed_count vs total_count to verify completion
  • Implement exponential backoff for polling (e.g., 15s, 30s, 60s)
  • Store partial results if needed before processing completes

Example: Enrich and Update CRM

This complete workflow enriches contacts and updates a CRM:

  1. Read CSV - Load contacts needing enrichment
  2. Loop - Process in batches of 250
  3. Object - Build batch data object
  4. Batch Post - Submit for enrichment
  5. Store - Save request_id to data table
  6. Delay - Wait 60 seconds
  7. Batch Result - Retrieve enriched data
  8. Loop Results - Iterate through enriched contacts
  9. Update CRM - Update contact records with enriched data
  10. Log - Record successful updates

Data Extraction Example:

// Extract verified emails from result
let contacts = $.result.data;
for (let contact of contacts) {
if (contact.email && contact.email.length > 0) {
let verifiedEmail = contact.email.find(e => e.qualification === "verified");
if (verifiedEmail) {
console.log(`Found email: ${verifiedEmail.email} for ${contact.full_name}`);
}
}
}

Example: Filter and Export Verified Contacts

This workflow filters contacts with verified emails and exports them:

  1. Batch Result - Retrieve enriched data
  2. JavaScript - Filter contacts with verified emails:
let verified = $.result.data.filter(contact => {
return contact.email && contact.email.some(e => e.qualification === "verified");
});
return { verified_contacts: verified };
  1. Excel - Export verified contacts to spreadsheet
  2. Mail - Send notification with export file

Understanding Email Qualification

Dropcontact returns email arrays with qualification statuses:

  • verified - Email confirmed as valid and deliverable
  • probable - Email likely valid but not verified
  • impossible - Email structure valid but domain/mailbox doesn't exist
  • catch-all - Server accepts all emails (cannot verify specific address)

Best Practice:

// Prioritize email selection
let bestEmail = null;
if (contact.email && contact.email.length > 0) {
// First try verified
bestEmail = contact.email.find(e => e.qualification === "verified");
// Fall back to most complete email
if (!bestEmail) {
bestEmail = contact.email.find(e => e.is_the_most_complete_email);
}
// Last resort: first email
if (!bestEmail) {
bestEmail = contact.email[0];
}
}

Common Errors and Solutions

Error: "Request ID cannot be empty"

Cause: The request ID input is missing or empty Solution:

  • Verify the Batch Post node successfully executed and returned a request_id
  • Check that the request_id variable is properly passed to this node
  • Ensure the request_id value is stored in message scope

Error: "Failed to send request"

Cause: Network connectivity issues or API endpoint unreachable Solution:

  • Verify internet connectivity
  • Check firewall settings allow HTTPS requests to dropcontact.io
  • Retry after a brief delay

Error: "Failed to parse response"

Cause: API returned invalid JSON or unexpected response format Solution:

  • Verify the request ID is valid and from a real Batch Post operation
  • Check that the batch request hasn't expired (results are kept for a limited time)
  • Ensure you're using the correct API key that submitted the batch

No data or empty results

Cause: Processing not yet complete or contacts didn't match Solution:

  • Wait longer before retrieving results (60+ seconds for large batches)
  • Check that submitted contacts had valid data combinations
  • Verify contacts exist in business databases (B2B focus)
  • Review the input data quality from the original Batch Post

Best Practices

  1. Timing: Wait at least 30-60 seconds after Batch Post before retrieving results
  2. Polling Strategy: Use exponential backoff (30s, 60s, 120s) if implementing retry logic
  3. Status Checks: Always verify processed_count equals total_count before final processing
  4. Error Handling: Enable Continue On Error for resilient automation flows
  5. Email Selection: Implement logic to prioritize verified emails over probable ones
  6. Data Validation: Check for null/empty values before using enriched fields
  7. Result Storage: Save complete results to database or file for audit trails
  8. Partial Processing: Handle scenarios where some contacts enrich successfully and others don't
  9. Rate Limits: Don't poll too frequently - respect API rate limits (60 requests/second max)
  10. Credit Tracking: Monitor which contacts consumed credits (those with found/verified emails)

Processing Status Indicators

Monitor these fields to track batch processing:

// Check if processing is complete
if ($.result.processed_count === $.result.total_count) {
console.log("Batch processing complete!");
} else {
console.log(`Still processing: ${$.result.processed_count}/${$.result.total_count}`);
}

// Check for errors
if ($.result.error) {
console.log("Batch processing encountered errors");
}

Working with Large Batches

For processing large contact lists (1000+ contacts):

  1. Split into batches of 250 contacts
  2. Submit each batch with Batch Post (store all request_ids)
  3. Wait 60 seconds
  4. Retrieve results for all batches in parallel
  5. Merge results into single dataset
  6. Process consolidated enriched data

Example Structure:

For each batch of 250:
- Batch Post → request_id_1, request_id_2, ...
- Store in array: [request_id_1, request_id_2, ...]

Delay 60 seconds

For each request_id in array:
- Batch Result → Append to results array

Combine all results → Final enriched dataset