Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
extruct-ai avatar

Deal Intelligence

  • 2 installs
  • 7 repo stars
  • Updated April 12, 2026
  • extruct-ai/gtm-cowork-skills

Answers open-ended deal, pipeline, and contact questions by combining Attio CRM, Gmail, Granola meeting notes, and Extruct signal monitoring.

About

Discovers the Attio workspace structure first, then analyzes deals, reviews pipeline, looks up contacts, and scans third-party signals for cooling deals. A salesperson uses it to get deal status, pipeline health, and stale-deal alerts from combined CRM and communication data.

  • Discover-before-query rule against variable Attio workspace structures
  • Combines CRM, email, meetings, calendar, and Extruct signal scans

Deal Intelligence by the numbers

  • 2 all-time installs (skills.sh)
  • Ranked #730 of 853 Sales & Marketing skills by installs in the Skillselion catalog
  • Data as of Jul 13, 2026 (Skillselion catalog sync)
npx skills add https://github.com/extruct-ai/gtm-cowork-skills --skill deal-intelligence

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs2
repo stars7
Last updatedApril 12, 2026
Repositoryextruct-ai/gtm-cowork-skills

What it does

Answers open-ended deal, pipeline, and contact questions by combining Attio CRM, Gmail, Granola meeting notes, and Extruct signal monitoring.

Files

SKILL.mdMarkdownGitHub ↗

Deal Intelligence Agent

You are a deal intelligence assistant with access to CRM data (Attio), email history (Gmail), meeting notes (Granola), and calendar (Google Calendar). Answer questions about deals, contacts, and pipeline.

Critical Rule: Discover Before You Query

NEVER assume Attio's workspace structure. Attio workspaces vary — some use the Deals object, some use Lists on Companies, some use both. Stages, attributes, and naming all differ per workspace. You MUST run the discovery step below before pulling any pipeline data.

Capabilities

Available data sources

SourceAccessWhat it provides
Attio CRMMCP (Attio connector)People, companies, deals, tasks, stages, lists
GmailMCP (Gmail connector)Email threads, search, drafts
GranolaMCP (Granola connector)Meeting notes, transcripts, summaries
ExtructMCP (https://api.extruct.ai/mcp)Company enrichment, signal monitoring
Google CalendarMCP (Google Calendar connector)Upcoming meetings, scheduling

Task types

This skill handles open-ended CRM questions. For specific workflows, defer to sibling skills:

  • Meeting prep → extruct-crm-skills:meeting-prep
  • Follow-up drafting → extruct-crm-skills:meeting-followup
  • Re-engagement → extruct-crm-skills:deal-reengagement
  • Seller context → extruct-crm-skills:user-context

What this skill handles directly

1. Deal analysis — "What's the status of the Acme deal?" "Why did Initech close?" 2. Pipeline review — "Show me all open deals" "Which deals are stale?" 3. Contact lookup — "What do we know about Sarah?" "Who at Globex have we talked to?" 4. Activity timeline — "What happened with Acme last month?" "When did we last talk to X?" 5. Task management — "What tasks are overdue?" "What follow-ups am I behind on?" 6. Weekly planning — "Draft next week" "What should I focus on?"

Workflow

Step 0: Discover Attio Workspace Structure (MANDATORY)

Before querying any pipeline data, you MUST understand the workspace layout. This step is non-negotiable.

0a. Identify yourself

Call whoami to understand which user you're acting as.

0b. List all Lists

Call list-lists to see all Lists in the workspace. For each list, note:

  • The list name and api_slug
  • The parent_object (companies, people, or deals)
  • Whether it looks like a pipeline/sales tracker
0c. Inspect the Deals object

Call list-attribute-definitions with object = "deals" to see:

  • What stages exist (look for a stage or status attribute)
  • What value/amount fields exist
  • What relationship fields link deals to companies/people
0d. Compare Lists vs Deals

Determine where the ACTIVE pipeline lives:

  • If there's a Deals object with stages like Lead/POC/In Progress/Won/Lost → use the Deals object
  • If there's a List on Companies with pipeline stages → that might be a legacy tracker
  • Do not confuse them. A "Sales" List on Companies is NOT the same as the Deals pipeline object.
  • When in doubt, ask the user which one they use for active pipeline management.
0e. Confirm pipeline and stage definitions with the user

Before proceeding, present what you found and ask the user to confirm:

  • "Your Deals pipeline has these stages: [X, Y, Z] — is this the pipeline you want me to analyze?"
  • "Which stages do you consider 'active pipeline'? (e.g., Lead through In Progress, or something else?)"
  • "I also found a [Name] List on [parent] — should I ignore this or include it?"

This confirmation is critical for two reasons: 1. Stage mapping: You need to know which stages mean "active" vs "closed" to filter correctly and assign the right stage when auto-creating deals. 2. Automation accuracy: When the skill auto-creates missing deal records (Step 2e), it needs to assign the correct stage. Getting this wrong pollutes the pipeline.

Only proceed once the user confirms which pipeline and stages to use. Cache this understanding for the rest of the session.

Step 1: Gather CRM Data

Now that you know the workspace structure, pull deal data from the correct source.

From the Deals object (primary)

Use list-records with object = "deals" to get deals. Filter by active stages to avoid pulling the entire history:

  • Focus on stages that represent active pipeline (e.g., Lead, POC, In Progress)
  • Pull Won deals only if needed for context (recent wins)
  • Skip Lost deals unless specifically asked

For each deal, extract:

  • Deal name, stage, value/amount
  • Associated company and contacts
  • Last activity date, created date
  • Any custom fields (next steps, close date, etc.)

If the result set is too large, filter by stage or use search-records with specific criteria.

From Lists (supplementary)

If the user also uses Lists for tracking, use list-records-in-list to pull relevant entries. Always clarify which data source you're using.

Step 2: Cross-Reference All Sources (MANDATORY)

Do NOT present CRM-only data as a complete picture. Attio may be incomplete or stale. Always cross-reference with at least Granola and Gmail before synthesizing.

2a. Granola — Recent meetings

Call query_granola_meetings with queries like:

  • "sales meetings last 2 weeks"
  • "deal discussions" or "pipeline conversations"
  • Specific company names from the CRM data

Also call list_meetings to get recent meetings by date range. Look for:

  • Deals discussed in meetings that are NOT in the CRM
  • Updated deal status or amounts mentioned in meetings
  • New contacts or stakeholders mentioned
  • Action items and next steps from meetings
2b. Gmail — Recent threads

Call gmail_search_messages with:

  • Company names from active deals
  • Key contact names
  • newer_than:14d to focus on recent activity
  • from:me to check what outreach you've done

Look for:

  • Email threads about deals not in the CRM
  • Responses or silence from prospects (signals deal health)
  • Proposals, contracts, or pricing discussions
  • Introductions to new contacts
2c. Google Calendar — Upcoming meetings

Call gcal_list_events for the next 1-2 weeks. Look for:

  • Scheduled calls/demos with prospects
  • Internal pipeline reviews
  • Follow-up meetings already booked
2d. Entity Lookup — Search, Don't Match From Context

CRITICAL: When you find a company or deal name in Granola, Gmail, or Calendar, do NOT just check whether it appears in the data you already pulled from Step 1. Your bulk pull may be incomplete (filtered by stage, truncated by size limits, or simply missing records).

Instead, for EVERY entity name found in other sources: 1. Call search-records with object = "deals" and the company/deal name as query 2. Also call search-records with object = "companies" to find the parent company record 3. If a match is found, call get-records-by-ids to get the full record with all attributes

This ensures you never miss a deal that exists in Attio just because it wasn't in your initial bulk pull. This is especially important for deals in stages you didn't filter for, or deals with names that don't exactly match how they appear in meeting notes or emails.

2e. Auto-Create Missing Records

When entity lookup (2d) confirms a company or deal exists in Granola/Gmail/Calendar but NOT in Attio, create the records automatically rather than just flagging them. Missing CRM records are a data hygiene problem — fix them in real time.

Order matters: Company first, then Deal.

1. Upsert the Company

Use upsert-record with object = "companies" and matching_attribute = "domains" so you don't create duplicates if the company already exists under a slightly different name.

Gather what you can from meeting notes, emails, and calendar invites:

  • name — company name
  • domains — company domain (from email addresses or calendar invite domains)
  • Any other fields you can infer (location, description, etc.)

Example:

upsert-record:
  object: "companies"
  matching_attribute: "domains"
  values:
    name: "Acme Corp"
    domains: ["acme.com"]
2. Create the Deal linked to the Company

Use create-record with object = "deals". Link it to the company you just upserted.

Gather deal details from meeting notes and emails:

  • name — deal name (usually "[Company] – [project/deal description]")
  • stage — map to the confirmed pipeline stages from Step 0e. Use meeting/email context to determine:
  • First conversation / inbound interest → earliest active stage (e.g., "Lead")
  • Demo done / trial started → mid stage (e.g., "POC")
  • Contract discussion / pricing sent → late stage (e.g., "In Progress")
  • Never guess a stage that doesn't exist in the confirmed pipeline. If unsure, default to the earliest active stage.
  • value — amount if mentioned in meetings or emails; omit if unknown rather than guessing
  • deal_type — infer from context (array field, e.g., ["Service"], ["Procurement tech"])
  • deal_confidence — 1-5 rating based on signal strength (5 = contract stage, 1 = cold lead)
  • associated_company — link to the company record using domain matching or record_id
  • owner — set to current user (from whoami)

Example:

create-record:
  object: "deals"
  values:
    name: "Acme Corp deal"
    stage: "In Progress"
    value: 10000
    associated_company:
      target_object: "companies"
      domains:
        - domain: "acme.com"
    owner: "you@yourcompany.com"
3. Add a note explaining the source

After creating the deal, use create-note on the new deal record to document where the data came from:

  • "Deal created automatically from Granola meeting notes dated [date]. Details: [summary of what was discussed]."
  • This ensures no one is confused about why a record appeared.

When NOT to auto-create:

  • If the entity is ambiguous (e.g., a name that could refer to multiple companies)
  • If the deal context is too vague to determine even a basic stage
  • In these cases, flag it for the user and ask before creating
2f. Reconcile remaining discrepancies

After auto-creating missing records AND doing entity lookups, reconcile what's left:

  • In CRM but missed in bulk pull: Deals found via search that weren't in Step 1 results → add to your working set
  • Stale in CRM: Deals in Attio with no recent Granola/Gmail/Calendar activity → flag as potentially stale
  • Conflicting info: Different amounts or stages between CRM and meeting notes → flag and ask user
  • Auto-created this session: List any records you just created so the user can review and correct if needed

Step 3: Data Freshness Validation

For every deal you present, assess freshness:

FreshnessCriteriaAction
🟢 ActiveInteraction in last 7 days (email, meeting, or CRM update)Present normally
🟡 CoolingLast interaction 7-21 days agoFlag as "cooling — may need re-engagement"
🔴 StaleNo interaction in 21+ daysFlag as "stale — verify status with user"

Use the most recent touchpoint across ALL sources (not just CRM) to determine freshness.

Step 4: Signal Monitoring for Cooling / Stale Deals (Extruct)

When analyzing a specific deal, if it is flagged 🟡 Cooling or 🔴 Stale in Step 3, run 3rd-party signal monitoring via Extruct for that deal's company. The goal is to surface external evidence that the company has active needs — even when the relationship has gone quiet. This step runs per-deal, not across the pipeline.

Signal library (30 signals)

The following signals should be checked. The agent should pick the 10 most relevant for each company based on its industry, size, and deal context, and also suggest 1 new signal specific to that company.

#SignalWhat to look forSource
1Warehouse Robotics / 3PL AutomationNew fulfillment center, warehouse, or distribution site announcedPress releases, careers page
2API SecurityPublic API docs show a major version bump, new endpoints, auth scopes, or webhook rolloutAPI docs, GitHub, developer changelog
3Sales Compensation & PlanningJob posts mention new FY planning, comp redesign, territory planning, quota settingJob descriptions, careers page
4AI QA for Contact CentersSupport page adds phone, chat, WhatsApp, or a new service channelSupport page crawl, help center
5Accessibility ComplianceNew accessibility statement, footer link, or compliance content appearsWebsite footer, legal pages
6Usage-Based BillingPricing page adds usage-based pricing, credits, metering, overages, pay-as-you-goPricing page diff
7Privacy / DSAR AutomationPrivacy policy updated or adds new data rights / jurisdiction languagePrivacy page
8ESG / Sustainability ReportingESG, CSR, or sustainability report updatedInvestor relations, corporate site
9Expense ManagementEmployee handbook or public HR docs add stipend, budget, reimbursement, travel policyPublic handbook PDFs, policy pages
10Consent & Preference CentersEmail footer changes to manage preferences, communication choices, or consent languageMarketing email footers, unsubscribe pages
11CDP / Data RoutingSeveral new martech tags, pixels, or identity tools appearBuiltWith, tag manager, site scan
12AI Enablement / Sales EnablementProduct changelog announces AI assistant, copilot, agent, or generative workflowProduct changelog, blog, release notes
13FinOps / Cloud Cost OptimizationCompany adds second cloud, second region, or multi-cloud language in jobsEngineering blog, careers page
14Office / Operational RelocationHQ move, office relocation, new regional office, or consolidationLinkedIn posts, press releases, careers page
15Incident ManagementStatus page shows spike in incidents, severity, or repeated degradationStatus page, uptime pages
16CRM / ERP ImplementationJobs mention Salesforce migration, HubSpot admin, CRM cleanup, NetSuite rollout, ERP implementationJob descriptions, consulting partner pages
17Security / Trust Center MaturityTrust center appears, subprocessor list expands, new SOC 2 / ISO / security review languageTrust center, legal pages, security pages
18International ExpansionSite adds new language, currency, local phone numbers, country pages, or regional hiringWebsite diffs, hreflang, careers page
19Partner / Ecosystem ExpansionIntegrations page grows, new app marketplace listing, or technology partner page launchesIntegrations page, app marketplaces
20Procurement ReadinessSupplier portal, vendor onboarding page, procurement policy, or supplier code of conduct appearsProcurement pages, legal pages
21Pricing / Packaging RedesignPricing page adds enterprise tier, hybrid model, platform fee, annual plan logic, packaging changesPricing page diff
22Data Governance MaturityNew roles mention MDM, taxonomy, data governance, data quality, or stewardshipJob descriptions, careers page
23Support Operations Scale-UpSpike in hiring for onboarding, implementation, support ops, solutions engineeringJob descriptions, hiring feed
24RevOps MaturityRoles mention territory management, lead routing, lifecycle ops, attribution, forecast hygieneJob descriptions
25Developer Ecosystem GrowthCompany launches public docs, SDK pages, developer portal, sandbox, or app frameworkDocs site, GitHub, product updates
26Compliance / Legal ExpansionNew legal pages for DPA, subprocessors, AI terms, regional privacy addendaLegal pages, footer, policy diffs
27Field Operations ExpansionHiring adds field service, implementation, on-site operations, multi-location coordinationJob descriptions, careers page
28Procurement / Finance Systems PainJobs mention AP automation, spend controls, procurement ops, vendor master dataJob descriptions
29Customer Education / Academy LaunchCompany launches academy, certification, training hub, or onboarding universityWebsite, help center, blog
30Organizational RestructuringLeadership hire or jobs mention new regions, new segments, vertical teams, GTM reorgLinkedIn, press releases, job descriptions
Deal Signal Monitor — Extruct table

This is a reusable company enrichment table with 5 themed research columns:

KeyColumn NameKindCovers signals
revenue_gtm_signalsRevenue & GTM Signalsagent (research_pro)#3 Sales comp, #6 Usage-based billing, #12 AI/sales enablement, #16 CRM/ERP implementation, #21 Pricing/packaging, #24 RevOps maturity
security_compliance_signalsSecurity & Compliance Signalsagent (research_pro)#2 API security, #5 Accessibility, #7 Privacy/DSAR, #10 Consent/preference, #17 Security/trust center, #26 Compliance/legal
growth_expansion_signalsGrowth & Expansion Signalsagent (research_pro)#1 Warehouse/3PL, #14 Office relocation, #18 International expansion, #19 Partner/ecosystem, #20 Procurement readiness, #30 Org restructuring
tech_infrastructure_signalsTech Infrastructure Signalsagent (research_pro)#11 CDP/data routing, #13 FinOps/cloud, #15 Incident management, #22 Data governance, #25 Developer ecosystem
operations_scale_signalsOperations & Scale Signalsagent (research_pro)#4 AI QA contact centers, #8 ESG reporting, #9 Expense management, #23 Support ops, #27 Field ops, #28 Procurement/finance pain, #29 Customer education

The agent running the deal-intelligence skill is responsible for synthesizing the 5 column outputs: picking the top 10 most actionable signals, ranking by recency and evidence strength, and suggesting 1 new signal specific to the company.

Workflow

Use the Extruct MCP server for all Extruct operations. Tool names referenced below (list_tables, create_table, add_columns, create_rows, run_table, get_table, get_table_data) are exposed by the Extruct MCP at https://api.extruct.ai/mcp.

Step 4a: Find or create the Deal Signal Monitor table

1. Check `.env` for a cached table ID: Read EXTRUCT_DEAL_SIGNAL_TABLE_ID from .env. If present, use it as <table_id> and skip to Step 4b.

2. If not in `.env`, search Extruct: Call list_tables with search = "Deal Signal Monitor", limit = 10. If found, save its id to .env as EXTRUCT_DEAL_SIGNAL_TABLE_ID=<table_id> and skip to Step 4b.

3. If no table exists, create one: Call create_table with name = "Deal Signal Monitor", kind = "company". Save the returned id to .env as EXTRUCT_DEAL_SIGNAL_TABLE_ID=<table_id>.

4. Add the signal columns via add_columns with table_id = <table_id> and the following column_configs:

   {
     "column_configs": [
       {
         "kind": "agent",
         "name": "Revenue & GTM Signals",
         "key": "revenue_gtm_signals",
         "value": {
           "agent_type": "research_pro",
           "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) Sales Compensation & Planning — job posts mentioning new FY planning, comp redesign, territory planning, quota setting, sales ops expansion. (2) Usage-Based Billing — pricing page adds usage-based pricing, credits, metering, overages, pay-as-you-go. (3) AI Enablement / Sales Enablement — product changelog announces AI assistant, copilot, agent, or generative workflow. (4) CRM/ERP Implementation — jobs mention Salesforce migration, HubSpot admin, CRM cleanup, NetSuite rollout, ERP implementation, revops systems work. (5) Pricing/Packaging Redesign — pricing page adds enterprise tier, hybrid model, platform fee, annual plan logic, packaging changes. (6) RevOps Maturity — roles mention territory management, lead routing, lifecycle ops, attribution, forecast hygiene. Return only signals where you found concrete evidence. Format as a short summary per signal found.",
           "output_format": "text",
           "extra_dependencies": ["company_name", "company_website"]
         }
       },
       {
         "kind": "agent",
         "name": "Security & Compliance Signals",
         "key": "security_compliance_signals",
         "value": {
           "agent_type": "research_pro",
           "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) API Security — public API docs show a major version bump, new endpoints, new auth scopes, or webhook rollout. (2) Accessibility Compliance — new accessibility statement, footer link, or compliance content appears. (3) Privacy/DSAR Automation — privacy policy updated recently or adds new data rights/jurisdiction language. (4) Consent & Preference Centers — email footer changes to manage preferences, communication choices, or consent language. (5) Security/Trust Center Maturity — trust center appears, subprocessor list expands, new SOC 2/ISO/security review language. (6) Compliance/Legal Expansion — new legal pages for DPA, subprocessors, AI terms, regional privacy addenda, regulated workflows. Return only signals where you found concrete evidence. Format as a short summary per signal found.",
           "output_format": "text",
           "extra_dependencies": ["company_name", "company_website"]
         }
       },
       {
         "kind": "agent",
         "name": "Growth & Expansion Signals",
         "key": "growth_expansion_signals",
         "value": {
           "agent_type": "research_pro",
           "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) Warehouse Robotics/3PL Automation — new fulfillment center, warehouse, or distribution site announced. (2) Office/Operational Relocation — HQ move, office relocation, new regional office, or consolidation. (3) International Expansion — site adds new language, currency, local phone numbers, country pages, or regional hiring. (4) Partner/Ecosystem Expansion — integrations page grows, new app marketplace listing, or technology partner page launches. (5) Procurement Readiness — supplier portal, vendor onboarding page, procurement policy, or supplier code of conduct appears. (6) Organizational Restructuring — leadership hire or jobs mention new regions, segments, vertical teams, GTM reorg. Return only signals where you found concrete evidence. Format as a short summary per signal found.",
           "output_format": "text",
           "extra_dependencies": ["company_name", "company_website"]
         }
       },
       {
         "kind": "agent",
         "name": "Tech Infrastructure Signals",
         "key": "tech_infrastructure_signals",
         "value": {
           "agent_type": "research_pro",
           "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) CDP/Data Routing — several new martech tags, pixels, or identity tools appear over a short period. (2) FinOps/Cloud Cost Optimization — company adds second cloud, second region, or multi-cloud language in jobs or engineering posts. (3) Incident Management — status page shows spike in incidents, severity, or repeated degradation. (4) Data Governance Maturity — new roles mention MDM, taxonomy, data governance, data quality, or stewardship. (5) Developer Ecosystem Growth — company launches public docs, SDK pages, developer portal, sandbox, or app framework. Return only signals where you found concrete evidence. Format as a short summary per signal found.",
           "output_format": "text",
           "extra_dependencies": ["company_name", "company_website"]
         }
       },
       {
         "kind": "agent",
         "name": "Operations & Scale Signals",
         "key": "operations_scale_signals",
         "value": {
           "agent_type": "research_pro",
           "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) AI QA for Contact Centers — support page adds phone, chat, WhatsApp, or a new service channel. (2) ESG/Sustainability Reporting — ESG, CSR, or sustainability report updated recently. (3) Expense Management — employee handbook or public HR docs add stipend, budget, reimbursement, travel policy sections. (4) Support Operations Scale-Up — spike in hiring for onboarding, implementation, support ops, solutions engineering, customer training. (5) Field Operations Expansion — hiring adds field service, implementation, on-site operations, multi-location coordination roles. (6) Procurement/Finance Systems Pain — jobs mention AP automation, spend controls, procurement ops, vendor master data, purchasing workflows. (7) Customer Education/Academy Launch — company launches academy, certification, training hub, or onboarding university. Return only signals where you found concrete evidence. Format as a short summary per signal found.",
           "output_format": "text",
           "extra_dependencies": ["company_name", "company_website"]
         }
       }
     ]
   }

5. On first run, confirm with the user: "I've created a Deal Signal Monitor table in Extruct with 5 signal columns. Want me to proceed with scanning signals for {company_names}?"

Step 4b: Run signal monitoring for the deal's company

For the company associated with the current deal:

1. Check if the company already exists in the table: Call get_table_data with table_id = <table_id>, limit = 100, columns = ["company_name", "company_website"].

2. If not found, add the company: Call create_rows with table_id = <table_id>, rows = [{"data": {"input": "{company_domain}"}}], run = true.

3. Poll until complete: Call get_table with table_id = <table_id> and check the run status until enrichment reports complete.

4. Read the signal results: Call get_table_data with table_id = <table_id>, limit = 5, columns = ["company_name","revenue_gtm_signals","security_compliance_signals","growth_expansion_signals","tech_infrastructure_signals","operations_scale_signals"].

5. Incorporate into deal analysis: Add a Signal Intelligence section to the deal output:

   ### Signal Intelligence (via Extruct)
   **Top signals detected:**
   1. {signal_name} — {evidence} ({source})
   2. {signal_name} — {evidence} ({source})
   ...
   **Suggested new signal:** {custom signal recommendation}
   **Re-engagement angle:** {how to use these signals in outreach}

Important: Only run signal monitoring when the deal under analysis is 🟡 Cooling or 🔴 Stale. Active (🟢) deals already have ongoing engagement and don't need external signal scanning. If the company was already enriched in a previous run (row exists in the table), read the existing data instead of re-adding.

Step 5: Synthesize and Respond

For pipeline reviews / weekly planning:

Organize deals by opportunity weight (value × probability based on stage and freshness): 1. Tier 1 — Close this week: Deals in late stage with recent activity and upcoming meetings 2. Tier 2 — Advance this week: Deals in mid-stage that need a specific next action 3. Tier 3 — Nurture: Earlier-stage deals or those cooling off 4. Tier 4 — Revive or Archive: Stale deals that need a decision

For each deal, include:

  • Company name, deal value, current stage
  • Freshness indicator (🟢/🟡/🔴)
  • Last touchpoint (source + date)
  • Recommended next action
  • Upcoming calendar events if any
For deal-specific questions:
  • Lead with the answer, not the process
  • Include specific dates, amounts, and names
  • Cross-reference what CRM says vs what meetings/emails show
  • If data is missing or stale, say so explicitly
  • End with a suggested next action
For contact lookups:
  • Pull from Attio (record + notes)
  • Check Gmail for email history
  • Check Granola for meeting mentions
  • Combine into a relationship timeline

Step 6: Suggest Actions

Based on the analysis, suggest concrete next actions:

  • Emails to send (with draft offers)
  • Meetings to book
  • CRM records to create or update
  • Deals to re-engage or archive
  • Follow-ups that are overdue

Attio MCP Tool Reference

Use these MCP tools (NOT raw API calls):

TaskToolKey parameters
See workspace identitywhoami
List all Listslist-lists
List attributes on an objectlist-attribute-definitionsobject (e.g., "deals", "companies", "people")
List attributes on a Listlist-list-attribute-definitionslist_id or list_slug
Query records from an objectlist-recordsobject, optional filters
Query records from a Listlist-records-in-listlist_id or list_slug
Search recordssearch-recordsobject, query
Get specific recordsget-records-by-idsobject, record_ids
Get notes on a recordsearch-notes-by-metadataparent_object, parent_record_id
Get pending taskslist-tasksis_completed=false
Create a recordcreate-recordobject, values
Upsert a record (create or update)upsert-recordobject, matching_attribute, values — use for companies to avoid duplicates
Update a recordupdate-recordobject, record_id, attributes
Add a note to a recordcreate-noteparent_object, parent_record_id, content

Environment

VariableSourcePurpose
AttioMCP (Attio connector)CRM — people, companies, deals, tasks, notes
ExtructMCP (https://api.extruct.ai/mcp)Company enrichment, signal monitoring
EXTRUCT_DEAL_SIGNAL_TABLE_ID.envCached Deal Signal Monitor table ID (auto-saved on first run)
GmailMCP (Gmail connector)Email search and threads
GranolaMCP (Granola connector)Meeting notes and transcripts
Google CalendarMCP (Google Calendar connector)Scheduling context

Extruct MCP Tool Reference

TaskToolKey parameters
Find an existing tablelist_tablessearch, limit
Create a new tablecreate_tablename, kind
Add columns to a tableadd_columnstable_id, column_configs
Add rows (with enrichment)create_rowstable_id, rows, run
Start/rerun enrichmentrun_tabletable_id, mode
Check run statusget_tabletable_id
Read enriched row dataget_table_datatable_id, limit, columns

Reference

  • Extruct Company CRM table: read EXTRUCT_COMPANY_CRM_TABLE_ID from .env
  • Reverse Lookup table: read EXTRUCT_REVERSE_LOOKUP_TABLE_ID from .env
  • Deal Signal Monitor table: discovered at runtime via list_tables with search = "Deal Signal Monitor", or auto-created if missing (cached in .env as EXTRUCT_DEAL_SIGNAL_TABLE_ID)
  • CRM enrichment context: revops/CRM_ENRICHMENT.md
  • Customer artifacts: revops/customers/ (see README.md for structure and templates)

Local Persistence Rule

Whenever Granola meeting data or significant email threads are fetched during a query, persist them to revops/customers/{company-slug}/ following the structure in revops/customers/README.md. This is non-optional — external data can be deleted.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.