> ## Documentation Index
> Fetch the complete documentation index at: https://blackbox.dasha.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Extract Structured Data from Conversations

> Automatically analyze and label Dasha BlackBox voice agent conversations using custom categories you define (sentiment, outcomes, topics, follow-up required). After each call, AI determines label values from transcripts—no manual review needed. Structured data flows directly to CRM, analytics dashboards, and business intelligence tools.

Configure analysis forms with labeled fields, and AI populates them from each transcript. Results arrive via webhook or API, ready for your CRM, analytics pipeline, or alerting workflows.

**What you'll learn:** Label configuration, extraction types, CRM integration, and analytics patterns.

## Why Use Post-Call Analysis?

### Eliminate Manual Review

Instead of listening to call recordings or reading transcripts, Dasha BlackBox automatically delivers structured summaries after each call.

### Enable CRM Integration

The system flows extracted data directly into your CRM systems, automatically updating customer records with conversation outcomes and sentiment.

### Business Intelligence

Aggregate analysis data across thousands of calls to identify trends, measure satisfaction, track resolution rates, and optimize agent performance.

### Compliance and Quality Assurance

Automatically verify calls cover required topics, disclosures are made, or specific information is collected.

### Trigger Workflows

Use extracted data to trigger automated workflows: escalate negative sentiment calls, schedule follow-ups, update ticket systems, or alert managers.

## How to Configure Post-Call Analysis

### Step 1: Create Analysis Form

1. Open your agent's configuration
2. Navigate to the **Features** tab
3. Scroll to **Post-Call Analysis** section
4. Click **Add Analysis Form**

You can create multiple analysis forms per agent, each analyzing different aspects of conversations.

### Step 2: Configure Analysis Form

**Analysis Name**

* Identifier for this analysis
* Example: "Customer Satisfaction Analysis", "Lead Qualification Data", "Support Ticket Info"

**Enable/Disable Toggle**

* Control whether this analysis runs
* Useful for temporarily disabling specific analyses without deleting configuration

### Step 3: Define Data Labels

Click **Add Label** to define each label the AI should determine from the conversation.

For each label, configure:

**Label Name**

* Identifier (alphanumeric, hyphens, underscores only)
* Used in API responses and webhooks
* Example: `customer_sentiment`, `issue_resolved`, `product_name`

**Label Description**

* What the AI should determine from the conversation
* Be specific and clear
* Example: "The customer's overall sentiment about the interaction: positive, neutral, or negative"

**Data Type**

* **String**: Free-form text (names, descriptions, notes)
* **Number**: Numeric values (ratings, counts, amounts)
* **Boolean**: True/false values (yes/no questions)
* **Enum**: Predefined set of options (dropdown-style choices)

**Enum Values** (if Data Type is Enum)

* List allowed values
* Example for sentiment: `positive`, `neutral`, `negative`
* Example for product: `ProductA`, `ProductB`, `ProductC`

**Required Flag**

* Whether this field must have a value
* If required and not found in transcript, analysis may mark field as unable to determine

## Configuration Examples

<Accordion title="Example: Customer Support Analysis">
  ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "analysisName": "Support Call Analysis",
    "enabled": true,
    "labels": [
      {
        "name": "customer_sentiment",
        "description": "Customer's overall sentiment: positive, neutral, or negative",
        "type": "enum",
        "values": ["positive", "neutral", "negative"],
        "required": true
      },
      {
        "name": "issue_resolved",
        "description": "Was the customer's issue fully resolved during the call?",
        "type": "boolean",
        "required": true
      },
      {
        "name": "issue_category",
        "description": "Category of the issue discussed",
        "type": "enum",
        "values": ["billing", "technical", "account", "shipping", "other"],
        "required": true
      },
      {
        "name": "follow_up_needed",
        "description": "Does this customer need follow-up contact?",
        "type": "boolean",
        "required": false
      },
      {
        "name": "resolution_notes",
        "description": "Brief summary of how the issue was resolved",
        "type": "string",
        "required": false
      }
    ]
  }
  ```
</Accordion>

<Accordion title="Example: Sales Lead Qualification">
  ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "analysisName": "Lead Qualification",
    "enabled": true,
    "labels": [
      {
        "name": "interest_level",
        "description": "Prospect's level of interest in the product",
        "type": "enum",
        "values": ["high", "medium", "low", "not_interested"],
        "required": true
      },
      {
        "name": "budget_discussed",
        "description": "Did the prospect discuss budget or pricing?",
        "type": "boolean",
        "required": true
      },
      {
        "name": "timeline",
        "description": "When does the prospect want to make a decision?",
        "type": "enum",
        "values": ["immediate", "this_month", "this_quarter", "long_term", "unclear"],
        "required": true
      },
      {
        "name": "decision_maker",
        "description": "Is this prospect the decision maker?",
        "type": "boolean",
        "required": true
      },
      {
        "name": "next_step",
        "description": "What is the agreed upon next step?",
        "type": "string",
        "required": true
      },
      {
        "name": "competitors_mentioned",
        "description": "Names of competitors the prospect mentioned, if any",
        "type": "string",
        "required": false
      }
    ]
  }
  ```
</Accordion>

<Accordion title="Example: Appointment Scheduling">
  ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "analysisName": "Appointment Details",
    "enabled": true,
    "labels": [
      {
        "name": "appointment_confirmed",
        "description": "Did the caller confirm their appointment?",
        "type": "boolean",
        "required": true
      },
      {
        "name": "appointment_date",
        "description": "The confirmed appointment date and time",
        "type": "string",
        "required": true
      },
      {
        "name": "reminder_preferred",
        "description": "Does the caller want a reminder call or SMS?",
        "type": "boolean",
        "required": false
      },
      {
        "name": "special_requests",
        "description": "Any special requests or accommodations needed",
        "type": "string",
        "required": false
      },
      {
        "name": "caller_mood",
        "description": "Overall mood/demeanor of the caller",
        "type": "enum",
        "values": ["friendly", "neutral", "frustrated", "rushed"],
        "required": false
      }
    ]
  }
  ```
</Accordion>

<Accordion title="Example: Survey Response Collection">
  ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "analysisName": "Survey Responses",
    "enabled": true,
    "labels": [
      {
        "name": "nps_score",
        "description": "Net Promoter Score: How likely is the customer to recommend us? (0-10)",
        "type": "number",
        "required": true
      },
      {
        "name": "service_rating",
        "description": "Customer rating of service quality (1-5)",
        "type": "number",
        "required": true
      },
      {
        "name": "primary_feedback",
        "description": "Main feedback or suggestion the customer provided",
        "type": "string",
        "required": false
      },
      {
        "name": "willing_to_follow_up",
        "description": "Is customer willing to be contacted for follow-up questions?",
        "type": "boolean",
        "required": false
      }
    ]
  }
  ```
</Accordion>

## Accessing Analysis Results

<Accordion title="Via Webhooks">
  Analysis results are included in result webhook payloads:

  ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "call_id": "call_abc123",
    "transcript": "...",
    "analysis_results": {
      "Support Call Analysis": {
        "customer_sentiment": "positive",
        "issue_resolved": true,
        "issue_category": "billing",
        "follow_up_needed": false,
        "resolution_notes": "Updated payment method, issue resolved"
      }
    }
  }
  ```
</Accordion>

Configure [result webhooks](/docs/webhooks-and-events/webhooks-overview) to receive analysis data automatically.

<Accordion title="Via API">
  Retrieve call results including analysis data:

  ```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
  GET /v1/calls/{call_id}/result
  ```
</Accordion>

Response includes `analysis_results` with all configured analyses.

### Via Dashboard

View analysis results in the call history:

1. Navigate to Calls page
2. Select completed call
3. View "Analysis Results" section

## Common Use Cases

### Customer Support

**Labels:** Sentiment, resolution status, issue category, follow-up needs
**Use:** Update support tickets, measure satisfaction, identify escalation needs

### Sales Qualification

**Labels:** Interest level, budget discussed, decision maker status, timeline
**Use:** Score leads, prioritize follow-ups, update CRM automatically

### Appointment Scheduling

**Labels:** Confirmation status, appointment details, reminders needed
**Use:** Update calendar systems, send confirmations, schedule reminders

### Survey Collection

**Labels:** Ratings, scores, feedback, willingness to follow up
**Use:** Aggregate survey data, identify promoters/detractors, analyze trends

### Compliance Verification

**Labels:** Required disclosures made, consent obtained, information provided
**Use:** Quality assurance, regulatory compliance, agent performance tracking

### Product Feedback

**Labels:** Products mentioned, feature requests, pain points, competitive intel
**Use:** Product roadmap, competitive analysis, customer insights

## Technical Considerations

### Analysis Accuracy

Post-call analysis is typically 85-95% accurate:

* Clear conversations with specific information are easiest to analyze
* Vague or ambiguous conversations may result in "unable to determine" for some labels
* Enum labels are generally more accurate than free-form string labels

### Processing Time

Analysis occurs after call completion:

* Typically processes within 5-30 seconds after call ends
* Complex analyses with many fields may take longer
* Results delivered via webhook once processing completes

### Transcript Quality

Analysis accuracy depends on transcript quality:

* Clear audio improves extraction accuracy
* Background noise or crosstalk can affect results
* Proper speech recognition configuration helps

### Multiple Analyses

You can configure multiple analysis forms:

* Each runs independently
* Results are namespaced by analysis name
* Use multiple forms to organize different data extraction needs

### Data Privacy

Be mindful of data privacy:

* Only analyze information you have legitimate need for
* Consider applicable data privacy regulations when labeling personal data
* Analysis results flow through webhooks—ensure secure transmission

## Measuring Effectiveness

### Key Metrics

* **Label completion rate** - Percentage of calls with all required labels populated
* **Accuracy rate** - Manual verification of label correctness
* **Unable to determine rate** - How often labels can't be determined from conversation
* **Downstream integration success** - Do CRM/analytics systems receive correct data?

### Quality Assurance Process

1. **Sample Review** - Manually verify 10-20 call analyses weekly
2. **Compare to Transcripts** - Ensure labeled data matches conversation content
3. **Track "Unable to Determine"** - Identify patterns in analysis failures
4. **Refine Descriptions** - Improve label descriptions based on accuracy results
5. **Adjust Requirements** - Make fewer labels required if analysis often fails

## Troubleshooting

### Problem: Field Consistently Shows "Unable to Determine"

**Solution:** Description may be too vague or information genuinely not in conversations. Review transcripts to verify information is discussed. Improve label description with examples. Consider making field optional if not always applicable.

### Problem: Wrong Enum Value Assigned

**Solution:** Enum values may be ambiguous or similar. Use more distinct value names. Improve label description to clarify when each value should be used. Add examples: "positive (customer expresses satisfaction)".

### Problem: String Fields Contain Too Much Text

**Solution:** Refine description to request "brief summary" or "one sentence". Be specific about length expectations. Consider using enum instead if values are predictable.

### Problem: Numbers Determined Incorrectly

**Solution:** Clarify in description what format numbers should be in. Example: "Rating from 1-5" vs. "Percentage from 0-100". Verify transcripts actually contain numeric values.

### Problem: Analysis Results Not in Webhook

**Solution:** Verify result webhook is configured. Check analysis is enabled. Ensure call completed successfully (analysis only runs for completed calls). Review webhook logs for delivery issues.

## Integration Examples

<Accordion title="CRM Integration">
  Use webhook to update CRM when calls complete:

  ```javascript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  // Webhook receiver
  app.post('/call-result-webhook', (req, res) => {
    const { call_id, analysis_results } = req.body;

    const analysis = analysis_results["Support Call Analysis"];

    // Update CRM
    crm.updateTicket({
      callId: call_id,
      sentiment: analysis.customer_sentiment,
      resolved: analysis.issue_resolved,
      category: analysis.issue_category,
      followUpNeeded: analysis.follow_up_needed
    });

    res.sendStatus(200);
  });
  ```
</Accordion>

<Accordion title="Escalation Workflow">
  Trigger manager alerts for negative calls:

  ```javascript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  if (analysis.customer_sentiment === "negative" && !analysis.issue_resolved) {
    notificationService.alertManager({
      priority: "high",
      subject: "Negative call requiring follow-up",
      callId: call_id
    });
  }
  ```
</Accordion>

<Accordion title="Analytics Pipeline">
  Stream analysis data to analytics warehouse:

  ```javascript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  analyticsDB.insert({
    timestamp: new Date(),
    callId: call_id,
    sentiment: analysis.customer_sentiment,
    resolved: analysis.issue_resolved,
    category: analysis.issue_category
  });
  ```
</Accordion>

## Next steps

<CardGroup cols={2}>
  <Card title="Webhooks" icon="webhook" href="/docs/webhooks-and-events/webhooks-overview">
    Receive analysis results automatically
  </Card>

  <Card title="Tools & Functions" icon="screwdriver-wrench" href="/docs/create/tools-and-functions">
    Extend agent capabilities during calls
  </Card>

  <Card title="Knowledge Bases" icon="book" href="/docs/advanced-features/knowledge-base">
    Improve response quality
  </Card>

  <Card title="Call History" icon="chart-mixed" href="/docs/monitor/call-history">
    Track conversation metrics
  </Card>
</CardGroup>
