Start every day with an agent that pulls together pipeline health, revenue trends, customer metrics, and risk signals into a single morning briefing.
Why Build a Revenue Ops Daily Pulse Agent?
Most revenue teams start their day by checking multiple dashboards, spreadsheets, and reports—pipeline health, revenue trends, customer metrics, risk signals. It takes 30 minutes just to get a pulse on the business. In this guide, we'll build a revenue ops daily pulse agent that automatically pulls together all these metrics into a single morning briefing—so you can start your day with a clear picture of what matters.
What This Agent Is Expected To Do
This agent answers concrete questions about the business pulse. Here's what it should handle:
- "What's the health of our Q1 pipeline?"
- "Show me revenue trends for the last 30 days"
- "Which customers are at risk this week?"
- "What deals need attention today?"
- "Give me a summary of yesterday's key metrics"
- "What are the top 3 things I should focus on today?"
The agent doesn't just return metrics—it provides context, explains trends, and surfaces actionable insights to prioritize your day.
Who This Agent Is For
This agent is built for teams that need a daily business pulse:
- Revenue Ops – Daily pipeline health, revenue trends, deal tracking, quota monitoring
- Sales Leadership – Morning briefings, deal prioritization, team performance insights
- Finance – Revenue forecasting, trend analysis, risk assessment
- Founders / Executives – Business health snapshot, key metrics, risk signals
If you live in CRM, billing systems, product analytics, and revenue reports, this agent is for you.
Core Use Cases
Here are the scenarios where this agent shines:
Morning business briefing: Instead of spending 30 minutes checking multiple dashboards and reports, the agent gives you a complete business pulse in one question. You start your day with clarity.
Pipeline health monitoring: The agent tracks pipeline health, deal progression, win rates, and at-risk deals. You can spot issues before they become problems.
Revenue trend analysis: The agent surfaces revenue trends, growth rates, and forecast accuracy. You can see what's working and what's not.
Risk signal detection: The agent identifies at-risk customers, stuck deals, and revenue risks. You can intervene early.
Daily prioritization: The agent surfaces the top 3–5 things you should focus on today, with context on why they matter.
The Ingredients: Data You'll Need
To build this agent, you'll need data from several systems:
Pipeline data (from CRM):
- Deals: deal ID, deal name, stage, value, close date, owner
- Accounts: account name, industry, company size, account owner
- Activities: calls, emails, meetings, next steps
- Forecast: forecasted revenue, probability, confidence
Revenue data (from billing, finance):
- Subscriptions: MRR, ARR, plan tier, renewal date, payment status
- Transactions: revenue, payment date, invoice status, churn
- Forecasts: revenue forecast, confidence level, scenario analysis
- Trends: month-over-month growth, year-over-year growth, run rate
Customer metrics (from CRM, product analytics):
- Health: customer health score, usage trends, engagement
- Risk: at-risk customers, churn risk, expansion opportunities
- Growth: expansion revenue, upsells, downgrades, cancellations
Team performance data (from CRM, sales tools):
- Quota: quota attainment, quota progress, quota gap
- Activity: calls made, emails sent, meetings booked, demos completed
- Conversion: win rate, conversion rate, average deal size, sales cycle
Derived fields (calculated in the view):
pipeline_health_score: Calculated pipeline health based on deal distribution and velocityrevenue_trend: Revenue trend (growing, stable, declining) based on recent datarisk_score: Calculated risk score based on pipeline, revenue, and customer metricspriority_score: Calculated priority score for deals and customersquota_attainment_percent: Percentage of quota achievedforecast_accuracy: Forecast accuracy based on historical data
Here's an example SQL view:
-- Revenue Ops Daily Pulse View
SELECT
-- Date and period
CURRENT_DATE() as pulse_date,
DATE_FORMAT(CURRENT_DATE(), '%Y-Q%q') as current_quarter,
-- Pipeline metrics
COUNT(DISTINCT d.deal_id) as total_deals,
SUM(d.deal_value) as total_pipeline_value,
SUM(CASE WHEN d.stage IN ('negotiation', 'proposal', 'closed_won') THEN d.deal_value ELSE 0 END) as committed_pipeline,
AVG(d.deal_value) as avg_deal_size,
COUNT(DISTINCT CASE WHEN d.stage = 'closed_won' THEN d.deal_id END) as won_deals_30d,
COUNT(DISTINCT CASE WHEN d.stage = 'closed_lost' THEN d.deal_id END) as lost_deals_30d,
CASE
WHEN COUNT(DISTINCT CASE WHEN d.stage = 'closed_won' THEN d.deal_id END) > 0
THEN COUNT(DISTINCT CASE WHEN d.stage = 'closed_won' THEN d.deal_id END) * 100.0 /
(COUNT(DISTINCT CASE WHEN d.stage = 'closed_won' THEN d.deal_id END) +
COUNT(DISTINCT CASE WHEN d.stage = 'closed_lost' THEN d.deal_id END))
ELSE 0
END as win_rate_30d,
AVG(CASE WHEN d.stage = 'closed_won' THEN DATEDIFF(d.close_date, d.created_date) END) as avg_sales_cycle_days,
COUNT(DISTINCT CASE WHEN d.stage IN ('negotiation', 'proposal') AND DATEDIFF(CURRENT_DATE(), d.last_activity_date) > 14 THEN d.deal_id END) as stuck_deals,
SUM(CASE WHEN d.stage IN ('negotiation', 'proposal') AND DATEDIFF(CURRENT_DATE(), d.last_activity_date) > 14 THEN d.deal_value ELSE 0 END) as stuck_deals_value,
-- Revenue metrics
SUM(s.mrr) as total_mrr,
SUM(CASE WHEN s.subscription_status = 'active' THEN s.mrr ELSE 0 END) as active_mrr,
SUM(CASE WHEN s.subscription_status = 'churned' THEN s.mrr ELSE 0 END) as churned_mrr_30d,
COUNT(DISTINCT CASE WHEN s.subscription_status = 'churned' AND s.churn_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.subscription_id END) as churned_customers_30d,
(SUM(CASE WHEN s.subscription_status = 'active' THEN s.mrr ELSE 0 END) -
SUM(CASE WHEN s.subscription_status = 'active' AND s.subscription_date < DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.mrr ELSE 0 END)) /
NULLIF(SUM(CASE WHEN s.subscription_status = 'active' AND s.subscription_date < DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.mrr ELSE 0 END), 0) * 100 as mrr_growth_rate_30d,
SUM(CASE WHEN s.subscription_status = 'active' AND s.renewal_date BETWEEN CURRENT_DATE() AND DATE_ADD(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.mrr ELSE 0 END) as renewal_mrr_next_30d,
-- Customer metrics
COUNT(DISTINCT c.account_id) as total_customers,
COUNT(DISTINCT CASE WHEN c.health_score < 50 THEN c.account_id END) as at_risk_customers,
COUNT(DISTINCT CASE WHEN c.health_score >= 80 THEN c.account_id END) as healthy_customers,
AVG(c.health_score) as avg_customer_health,
SUM(CASE WHEN c.expansion_opportunity = true THEN c.mrr ELSE 0 END) as expansion_opportunity_mrr,
-- Team performance
SUM(q.quota) as total_quota,
SUM(q.quota_attained) as total_quota_attained,
SUM(q.quota_attained) * 100.0 / NULLIF(SUM(q.quota), 0) as quota_attainment_percent,
COUNT(DISTINCT CASE WHEN q.quota_attainment_percent < 80 THEN q.rep_id END) as reps_below_quota,
-- Forecast metrics
f.forecasted_revenue_q1,
f.forecast_confidence,
(f.forecasted_revenue_q1 - SUM(d.deal_value)) / NULLIF(SUM(d.deal_value), 0) * 100 as forecast_variance_percent,
-- Calculated scores
CASE
WHEN COUNT(DISTINCT d.deal_id) > 50 AND SUM(d.deal_value) > 2000000 AND
COUNT(DISTINCT CASE WHEN d.stage IN ('negotiation', 'proposal') AND DATEDIFF(CURRENT_DATE(), d.last_activity_date) > 14 THEN d.deal_id END) < 5 THEN 'healthy'
WHEN COUNT(DISTINCT CASE WHEN d.stage IN ('negotiation', 'proposal') AND DATEDIFF(CURRENT_DATE(), d.last_activity_date) > 14 THEN d.deal_id END) > 10 OR
COUNT(DISTINCT CASE WHEN c.health_score < 50 THEN c.account_id END) > 20 THEN 'at_risk'
ELSE 'moderate'
END as pipeline_health_score,
CASE
WHEN (SUM(CASE WHEN s.subscription_status = 'active' THEN s.mrr ELSE 0 END) -
SUM(CASE WHEN s.subscription_status = 'active' AND s.subscription_date < DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.mrr ELSE 0 END)) /
NULLIF(SUM(CASE WHEN s.subscription_status = 'active' AND s.subscription_date < DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.mrr ELSE 0 END), 0) * 100 > 10 THEN 'growing'
WHEN (SUM(CASE WHEN s.subscription_status = 'active' THEN s.mrr ELSE 0 END) -
SUM(CASE WHEN s.subscription_status = 'active' AND s.subscription_date < DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.mrr ELSE 0 END)) /
NULLIF(SUM(CASE WHEN s.subscription_status = 'active' AND s.subscription_date < DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.mrr ELSE 0 END), 0) * 100 < -5 THEN 'declining'
ELSE 'stable'
END as revenue_trend,
CASE
WHEN COUNT(DISTINCT CASE WHEN d.stage IN ('negotiation', 'proposal') AND DATEDIFF(CURRENT_DATE(), d.last_activity_date) > 14 THEN d.deal_id END) > 10 OR
COUNT(DISTINCT CASE WHEN c.health_score < 50 THEN c.account_id END) > 20 OR
COUNT(DISTINCT CASE WHEN s.subscription_status = 'churned' AND s.churn_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) THEN s.subscription_id END) > 5 THEN 'high'
WHEN COUNT(DISTINCT CASE WHEN d.stage IN ('negotiation', 'proposal') AND DATEDIFF(CURRENT_DATE(), d.last_activity_date) > 14 THEN d.deal_id END) > 5 OR
COUNT(DISTINCT CASE WHEN c.health_score < 50 THEN c.account_id END) > 10 THEN 'medium'
ELSE 'low'
END as risk_score
FROM hubspot.deals d
LEFT JOIN hubspot.accounts a ON d.account_id = a.account_id
LEFT JOIN stripe.subscriptions s ON a.account_id = s.account_id
LEFT JOIN customer_health.customers c ON a.account_id = c.account_id
LEFT JOIN sales.quota q ON d.owner_id = q.rep_id
LEFT JOIN finance.forecasts f ON DATE_FORMAT(CURRENT_DATE(), '%Y-Q%q') = f.forecast_quarter
WHERE d.is_active = true
AND (d.close_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) OR d.close_date IS NULL)
GROUP BY f.forecasted_revenue_q1, f.forecast_confidence;
This view joins data from your CRM (deals, accounts), billing (subscriptions, revenue), customer health (health scores, risk), sales (quota, performance), and finance (forecasts), and calculates pipeline health, revenue trends, and risk scores.
Key points:
- The view joins across multiple systems in a single query
- It calculates derived fields (pipeline health score, revenue trend, risk score)
- It filters to active deals and recent data
- It includes team performance and forecast metrics
Step 4: Add MCP Tools on Top of This View
Create MCP tools that expose this view to agents. Tools translate natural language questions into SQL queries.
Tool 1: get_daily_pulse(date: string)
This tool returns the complete daily business pulse.
Description: "Returns comprehensive daily business pulse including pipeline health, revenue trends, customer metrics, team performance, and risk signals for the specified date."
SQL Query:
SELECT * FROM revenue_ops_daily_pulse_view
WHERE pulse_date = {date};
Tool 2: get_pipeline_health(quarter: string)
This tool returns pipeline health for a specific quarter.
Description: "Returns pipeline health metrics including deal count, pipeline value, win rate, stuck deals, and health score for the specified quarter."
SQL Query:
SELECT
total_deals,
total_pipeline_value,
committed_pipeline,
avg_deal_size,
win_rate_30d,
avg_sales_cycle_days,
stuck_deals,
stuck_deals_value,
pipeline_health_score
FROM revenue_ops_daily_pulse_view
WHERE current_quarter = {quarter};
Tool 3: get_revenue_trends(days_back: number)
This tool returns revenue trends for the specified period.
Description: "Returns revenue trends including MRR, growth rate, churn, renewals, and trend direction for the specified number of days back."
SQL Query:
SELECT
total_mrr,
active_mrr,
churned_mrr_30d,
churned_customers_30d,
mrr_growth_rate_30d,
renewal_mrr_next_30d,
revenue_trend
FROM revenue_ops_daily_pulse_view
WHERE pulse_date >= DATE_SUB(CURRENT_DATE(), INTERVAL {days_back} DAY)
ORDER BY pulse_date DESC;
Tool 4: get_priority_items(limit: number)
This tool returns priority items that need attention.
Description: "Returns priority items including stuck deals, at-risk customers, reps below quota, and high-risk signals that need attention today."
SQL Query:
SELECT
'stuck_deals' as item_type,
stuck_deals as count,
stuck_deals_value as value,
'Deals stuck in negotiation/proposal for >14 days' as description
FROM revenue_ops_daily_pulse_view
WHERE pulse_date = CURRENT_DATE()
UNION ALL
SELECT
'at_risk_customers' as item_type,
at_risk_customers as count,
NULL as value,
'Customers with health score <50' as description
FROM revenue_ops_daily_pulse_view
WHERE pulse_date = CURRENT_DATE()
UNION ALL
SELECT
'reps_below_quota' as item_type,
reps_below_quota as count,
NULL as value,
'Sales reps below 80% quota attainment' as description
FROM revenue_ops_daily_pulse_view
WHERE pulse_date = CURRENT_DATE()
ORDER BY count DESC
LIMIT {limit};
Tools can be called by agents with natural language
Step 5: Wire the Tool to an Agent Builder
Connect your Pylar tools to an agent builder. You can use:
- OpenAI Platform – Build custom agents with GPT-4
- LangGraph – Build complex agent workflows
- Claude Desktop – Quick setup for internal use
- Cursor – Developer-focused agent builder
- Zapier / Make / n8n – Automation platforms

Agent Instructions:
Give your agent clear instructions.
You are a revenue operations daily pulse assistant. Your job is to provide a comprehensive morning briefing on business health, pipeline, revenue, and risk signals.
Rules:
- Only use the tools provided. Do not invent metrics or make assumptions.
- When asked for a daily pulse, use
get_daily_pulsewith today's date to get complete context.- When asked about pipeline health, use
get_pipeline_healthwith the requested quarter.- When asked about revenue trends, use
get_revenue_trendswith the requested time period.- When asked about priorities, use
get_priority_itemsto get items that need attention.- Always provide context: explain what metrics mean, why trends matter, or what actions to take.
- If you don't have data, say so. Don't guess.
Available tools:
get_daily_pulse(date)— Get complete daily business pulseget_pipeline_health(quarter)— Get pipeline health metricsget_revenue_trends(days_back)— Get revenue trendsget_priority_items(limit)— Get priority items needing attention
Example Prompts Users Can Try:
- "What's the health of our Q1 pipeline?"
- "Show me revenue trends for the last 30 days"
- "Which customers are at risk this week?"
- "What deals need attention today?"
- "Give me a summary of yesterday's key metrics"
- "What are the top 3 things I should focus on today?"
The agent uses the tools to answer these questions, providing a comprehensive business pulse and actionable insights.
Step 6: Add Evals & Guardrails
Add observability and guardrails to ensure the agent works correctly and safely.
Logging:
Track:
- Which metrics and time periods are queried most frequently
- Error rates and types
- Query latency
- Unusual outputs or patterns
Use Pylar's Evals system to monitor:
- Success rates: How often queries succeed vs. fail
- Error patterns: What errors occur and why
- Query shapes: What types of queries agents make
- Raw logs: Every query with full context
Guardrails:
Add simple checks:
No PII leaking: Views exclude sensitive data (personal email addresses, internal deal notes, financial details). Agents can only query through views, so they never see PII.
Row limits: Views automatically limit results (e.g., top 100 deals, last 90 days of data). Agents can't query unbounded datasets.
Time windows: Views filter to recent data (last 90 days for deals, last 30 days for revenue). Agents can't query historical data beyond what's needed.
Access control: Different views for different teams. Revenue Ops sees all metrics. Sales sees only their deals. Finance sees only aggregated revenue.
Step 7: Rollout Playbook
How to introduce this agent to your revenue team:
Week 1: Pilot with 2–3 revenue ops managers
- Set up the agent with basic tools
- Have managers try it for morning briefings
- Collect feedback on what's missing
Week 2: Expand to full revenue ops team
- Add more tools based on feedback
- Create team-wide Slack integration
- Set up daily morning briefings
Week 3: Add leadership
- Create executive views (aggregated metrics, high-level trends)
- Add leadership tools (business health snapshot, risk assessment)
- Set up weekly business reviews using the agent
Example Slack message: "Every morning at 8 AM, the pulse agent sends: 'Good morning! Here's your business pulse for today: [summary]'"
How This Replaces Dashboards (Without Killing Them)
Old flow: Open CRM dashboard, check pipeline. Open billing dashboard, check revenue. Open customer health dashboard, check risk. Open quota dashboard, check team performance. Spend 30 minutes to get a pulse on the business.
New flow: Ask one question, get complete business pulse with pipeline health, revenue trends, customer metrics, team performance, and risk signals—all in one answer.
The agent synthesizes data from multiple systems into a coherent narrative. You get answers in seconds instead of minutes.
Dashboards are still useful for:
- Monitoring known metrics
- Executive summaries
- Scheduled reports
- Visual exploration
Agents are better for:
- Ad-hoc questions
- Cross-system analysis
- Deep dives
- Proactive insights
Use both. Dashboards for monitoring. Agents for exploration.
Frequently Asked Questions
Where does this agent get its data from?
Can I customize what metrics are included?
Will this replace my revenue dashboards?
How do we prevent it from showing sensitive data?
Can different revenue roles use the same agent?
What if I only have CRM and billing data today?
How do I know if the agent is working correctly?
Can I schedule daily briefings?
Most revenue teams start their day by checking multiple dashboards and reports. This agent automatically pulls together pipeline health, revenue trends, customer metrics, and risk signals into a single morning briefing—so you can start your day with clarity.
If you want to try this with your own data, you can spin up a Revenue Ops Daily Pulse View in Pylar and plug it into your existing agent builder. Start with CRM and billing data, add customer health and sales performance data as you connect them, and iterate based on what your team needs.
Related Posts
The Hidden Cost of Giving AI Raw Access to Your Database
We've seen teams rush to connect AI agents directly to databases, only to discover the real costs: security risks, governance nightmares, and agents making expensive mistakes. Here's what we learned and why a structured layer matters.
Why Agent Projects Fail (and How Data Structure Fixes It)
Most AI agent projects fail not because of the models, but because agents can't reliably access the right data at the right time. We break down the common failure patterns and how structured data views solve them.
The Rise of Internal AI Agents for Ops, RevOps, and Support
Internal AI agents are becoming the new operating system for modern teams. We explore how ops, RevOps, and support teams are using agents to automate workflows and get answers faster.
