Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.mavera.io/llms.txt

Use this file to discover all available pages before exploring further.

Scenario

Your sales team logs meeting notes in HubSpot after every prospect call. After 20+ meetings, patterns emerge — same objections, feature requests, competitive mentions — but nobody synthesizes them. You aggregate notes and send them to Mave for theme analysis and recommendations.

Architecture

Code

import os, requests, time

HS = os.environ["HUBSPOT_ACCESS_TOKEN"]
MV = os.environ["MAVERA_API_KEY"]

# 1. Pull recent meetings
r = requests.post("https://api.hubapi.com/crm/v3/objects/meetings/search",
    headers={"Authorization": f"Bearer {HS}"},
    json={
        "filterGroups": [{"filters": [{"propertyName": "hs_meeting_outcome", "operator": "HAS_PROPERTY"}]}],
        "properties": ["hs_meeting_title", "hs_meeting_body", "hs_internal_meeting_notes", "hs_meeting_outcome"],
        "sorts": [{"propertyName": "hs_meeting_start_time", "direction": "DESCENDING"}],
        "limit": 25,
    })
if r.status_code == 429: time.sleep(1)
r.raise_for_status()
meetings = r.json().get("results", [])

# 2. Aggregate notes
notes = []
for m in meetings:
    p = m.get("properties", {})
    body = p.get("hs_internal_meeting_notes") or p.get("hs_meeting_body") or ""
    if body.strip():
        notes.append(f"Meeting: {p.get('hs_meeting_title','Untitled')}\nOutcome: {p.get('hs_meeting_outcome','')}\n{body[:500]}")

block = "\n\n---\n\n".join(notes[:20])

# 3. Mave synthesis
mave = requests.post("https://app.mavera.io/api/v1/mave/chat",
    headers={"Authorization": f"Bearer {MV}", "Content-Type": "application/json"},
    json={"message": f"""Synthesize key themes, objections, competitive mentions, and feature requests
from these {len(notes)} prospect meetings.

For each theme: frequency, representative quotes, strategic recommendation.
Top 3 objections with suggested responses. Competitive products mentioned.

{block}"""}).json()

print("--- Meeting Intelligence ---")
print(mave.get("content", "")[:2000])

Example Output

## Key Themes (20 meetings)
1. Data Integration Complexity (14/20) → Lead with native integrations list
2. Budget Timing (9/20) → Offer pilot pricing bridging to next fiscal year

## Top 3 Objections
1. "Locked into annual contract with [competitor]" (8x)
2. "No bandwidth to onboard another tool" (6x)
3. "How is this different from what we have?" (5x)

Error Handling

HubSpot stores notes in hs_internal_meeting_notes or hs_meeting_body. The code checks both.
50+ meetings may exceed Mave’s context. Code truncates to 500 chars each and caps at 20. Batch-summarize larger volumes.

HubSpot Integration

Mave Agent