Proposal Generator
Auto-generate branded proposals from meeting notes and company research
🧂 Ingredients
🔌 APIs
meeting_transcripts_to_extract_client_needs_and_pain_points
🔄 Alternatives:
research_prospect_s_company_for_context_and_personalization
🔄 Alternatives:
generate_branded_pdf_proposals
🔄 Alternatives:
store_generated_proposals_in_organized_folders
🔄 Alternatives:
send_proposal_to_prospect_via_draft_for_review
🔄 Alternatives:
📋 Step-by-Step Build Guide
Input
1. Input: meeting notes, transcript, or a brief description of the prospect's needs
Input: meeting notes, transcript, or a brief description of the prospect's needs Steps: 1. Validate all required inputs are available 2. Execute the operation described above 3. Verify the result meets expected output format 4. Handle errors gracefully — retry transient failures, log and alert on persistent ones 5. Return structured output with status and any relevant data If any required data is missing, request it from the user before proceeding.
Research the prospect's company via Brave Search
2. Research the prospect's company via Brave Search — industry, size, recent news, challenges
Search the web using the Brave Search API.
GET https://api.search.brave.com/res/v1/web/search?q={query}&count=10&freshness=pd
Headers: X-Subscription-Token: {BRAVE_API_KEY}
Parse the results: extract title, URL, description for each result.
Deduplicate results from the same domain.
Score relevance based on: keyword match in title (high), recency (high), source authority (medium).
Return the top results with: title, 2-sentence summary, source URL, and publish date.
If the search returns no results, try broadening the query by removing the least important keyword.Extract key information
3. Extract key information: pain points, desired outcomes, timeline, budget range, decision makers
Parse the input data and extract the specified fields. Processing steps: 1. Parse the raw input (JSON response, transcript text, HTML content) 2. Identify and extract each required field 3. Normalize data formats: dates to ISO 8601, amounts to numbers, text trimmed 4. Validate extracted data — flag missing or malformed fields 5. Structure the output as a clean JSON object For text extraction (transcripts, articles): - Use pattern matching for structured data (dates, amounts, URLs) - Use semantic understanding for unstructured data (key decisions, action items, sentiment) Return both the extracted data and a confidence indicator for each field.
Generate proposal sections
4. Generate proposal sections: Executive Summary, Understanding Your Challenges, Proposed Solution, Implementation Timeline, Investment/Pricing, Why Us, Next Steps
Compile the gathered data into a structured report. Format as clean Markdown with: - Title/date header - Executive summary (2-3 sentences) - Key metrics section with actual numbers - Detailed sections with bullet points - Action items or recommendations at the end Keep it scannable — busy people read reports in 30 seconds. Use emoji sparingly for visual anchors (📊 metrics, ✅ wins, ⚠️ concerns, 📋 action items). Include data comparisons: "X this period vs Y last period (↑Z%)" If any data source was unavailable, note it clearly: "⚠️ [Source] data unavailable — excluded from this report."
Personalize with company
5. Personalize with company-specific details — reference their industry, competitors, and specific challenges discussed
Personalize with company-specific details — reference their industry, competitors, and specific challenges discussed Steps: 1. Validate all required inputs are available 2. Execute the operation described above 3. Verify the result meets expected output format 4. Handle errors gracefully — retry transient failures, log and alert on persistent ones 5. Return structured output with status and any relevant data If any required data is missing, request it from the user before proceeding.
Generate a branded PDF using nano
6. Generate a branded PDF using nano-pdf with your company logo, colors, and formatting
Generate a branded PDF using nano-pdf with your company logo, colors, and formatting Steps: 1. Validate all required inputs are available 2. Execute the operation described above 3. Verify the result meets expected output format 4. Handle errors gracefully — retry transient failures, log and alert on persistent ones 5. Return structured output with status and any relevant data If any required data is missing, request it from the user before proceeding.
Save to Google Drive under /Proposals/{Company Name}/{Date}/
7. Save to Google Drive under /Proposals/{Company Name}/{Date}/
Persist the data to the configured storage. Data structure: - Include timestamp (ISO 8601) with every record - Use consistent field names across entries - Store raw values (not formatted) for future analysis - Add a source/origin field for audit trail Storage operation: 1. Validate the data before writing 2. Check for duplicates (by timestamp + unique key) 3. Append to existing records — never overwrite 4. Verify the write succeeded 5. Return the stored record ID/reference
Draft a cover email introducing the proposal and suggesting next steps
8. Draft a cover email introducing the proposal and suggesting next steps
Draft a cover email introducing the proposal and suggesting next steps Steps: 1. Validate all required inputs are available 2. Execute the operation described above 3. Verify the result meets expected output format 4. Handle errors gracefully — retry transient failures, log and alert on persistent ones 5. Return structured output with status and any relevant data If any required data is missing, request it from the user before proceeding.
🤖 Example Agent Prompt
Input: meeting notes, transcript, or a brief description of the prospect's needs Steps: 1. Validate all required inputs are available 2. Execute the operation described above 3. Verify the result meets expected output format 4. Handle errors gracefully — retry transient failures, log and alert on persistent ones 5. Return structured output with status and any relevant data If any required data is missing, request it from the user before proceeding.
Copy this prompt into your agent to get started.