Investment pitch deck creation from financial data
- Published
Creating a convincing investment pitch deck from raw financial data is tedious work. You extract figures from spreadsheets, manually input them into presentation software, hunt for the right charts, check your calculations twice, then realise someone's given you updated numbers and you start again. The whole process takes hours and introduces opportunities for errors at every handoff.......
What if you could automate the entire journey from financial data to polished pitch deck? Feed raw numbers into evalyze-ai for financial analysis, pass the insights to finster-ai for market positioning, then trigger preswald-ai to build your actual slide deck. No copying and pasting. No manual data entry. No waiting between steps.
This is the kind of workflow that separates teams shipping decks in hours from those still building them at midnight. In this Alchemy guide, we'll show you how to wire these three tools together using an orchestration platform so that uploading your financial data triggers a complete, automated pipeline that outputs a ready-to-present deck.
The Automated Workflow
We're going to build this workflow using n8n, which offers excellent visibility into data flow and runs either on Zapier's infrastructure or your own server. We'll start with the simplest version, then show you where to add error handling and conditional logic.
Step 1:
Set up your n8n account and connect evalyze-ai
First, create or log into your n8n workspace. You'll need API keys for all three tools.
For evalyze-ai, grab your API key from the dashboard and store it securely in n8n's credentials manager:
https://api.evalyze-ai.com/v1/auth/credentials
Create a new n8n workflow and add an HTTP Request node as your trigger. This will accept incoming financial data. Configure it like this:
Method: POST
URL: http://localhost:5678/webhook/pitch-deck-workflow
Authentication: None (for now; add bearer tokens in production)
Next, add a second HTTP Request node to call evalyze-ai's financial analysis endpoint:
Method: POST
URL: https://api.evalyze-ai.com/v1/analysis/financials
Headers:
Authorization: Bearer YOUR_EVALYZE_API_KEY
Content-Type: application/json
Body (raw JSON):
{
"revenue": {{ $json.body.revenue }},
"costs": {{ $json.body.costs }},
"growth_rate": {{ $json.body.growth_rate }},
"market_data": {{ $json.body.market_data }},
"period": "quarterly"
}
This node receives your webhook data (from the first node) and sends it to evalyze-ai. The {{ }} syntax lets n8n reference values from previous nodes. evalyze-ai will return structured analysis including margin calculations, cash burn projections, and key metrics.
Store the response in a variable so you can use it later:
Set node: "financial_analysis" = {{ $json.analysis }}
Step 2:
Pass insights to finster-ai for market positioning
Once evalyze-ai completes its analysis, immediately send those insights to finster-ai. This tool contextualises your financials within the broader market, pulling in comparable company data and competitive positioning. For more on this, see Competitive market intelligence dashboard from pricing an....
Add another HTTP Request node:
Method: POST
URL: https://api.finster-ai.com/v1/market/position
Headers:
Authorization: Bearer YOUR_FINSTER_API_KEY
Content-Type: application/json
Body (raw JSON):
{
"company_name": {{ $json.body.company_name }},
"industry": {{ $json.body.industry }},
"financial_metrics": {{ $json.financial_analysis }},
"revenue_target": {{ $json.body.revenue_target }},
"include_comps": true
}
finster-ai will return market positioning data, including:
- Comparable public and private company analysis
- Valuation ranges
- Market size estimates
- Competitive differentiation points
Add another Set node to capture this:
Set node: "market_positioning" = {{ $json.positioning }}
Step 3:
Build the pitch deck with preswald-ai
Now you have comprehensive financial analysis and market context. Time to generate the actual presentation. preswald-ai accepts structured data and builds visually coherent slides automatically.
Add a third HTTP Request node:
Method: POST
URL: https://api.preswald-ai.com/v1/decks/create
Headers:
Authorization: Bearer YOUR_PRESWALD_API_KEY
Content-Type: application/json
Body (raw JSON):
{
"title": {{ $json.body.company_name }},
"deck_type": "investment_pitch",
"slides":
{
"type": "title_slide",
"company": {{ $json.body.company_name }},
"tagline": {{ $json.body.tagline }}
},
{
"type": "problem_solution",
"problem": {{ $json.body.problem_statement }},
"solution": {{ $json.body.solution }}
},
{
"type": "market_opportunity",
"market_size": {{ $json.market_positioning.tam }},
"serviceable_addressable_market": {{ $json.market_positioning.sam }},
"growth_rate": {{ $json.financial_analysis.market_growth }}
},
{
"type": "financial_metrics",
"revenue": {{ $json.financial_analysis.projected_revenue }},
"burn_rate": {{ $json.financial_analysis.monthly_burn }},
"runway_months": {{ $json.financial_analysis.[[runway](/tools/runway) }},
"unit_economics": {{ $json.financial_analysis.unit_economics }}
},
{
"type": "competitive_landscape",
"competitors": {{ $json.market_positioning.competitors }},
"differentiation": {{ $json.market_positioning.differentiation }}
},
{
"type": "valuation",
"valuation_range": {{ $json.market_positioning.valuation_range }},
"methodology": "comparable_companies"
}
],
"style": "professional",
"output_format": "pdf"
}
preswald-ai will return a URL to your completed deck. Capture this:
Set node: "deck_output" = {{ $json.deck_url }}
Step 4:
Store the deck and notify your team
Finally, add a node to save the deck location and send notification. If you want to store the file, use the Google Drive node (assuming you've connected it to n8n):
Google Drive node:
Action: Upload file
File URL: {{ $json.deck_output }}
Folder: /Pitch Decks
File name: {{ $json.body.company_name }}_pitch_{{ now().format('YYYY-MM-DD') }}.pdf
Then add an email or Slack notification:
Slack node:
Channel: #finance-team
Message: "Investment pitch deck for {{ $json.body.company_name }} is ready. Download: {{ $json.deck_output }}"
Or via email:
Gmail node:
To: {{ $json.body.recipient_email }}
Subject: Pitch deck complete: {{ $json.body.company_name }}
Body: Your investment pitch deck has been generated and uploaded to Google Drive. Review it here: {{ $json.deck_output }}
Putting it all together: your complete workflow
Here's what your n8n workflow looks like from top to bottom:
- Webhook Trigger (receives financial data POST request)
- evalyze-ai HTTP Request (financial analysis)
- Set node (store financial analysis)
- finster-ai HTTP Request (market positioning)
- Set node (store market positioning)
- preswald-ai HTTP Request (deck generation)
- Set node (store deck output)
- Google Drive Upload (save the PDF)
- Slack Notification (alert the team)
When you POST your financial data to the webhook URL, the entire chain executes automatically. Each step waits for the previous one to finish, ensuring data flows correctly.
Here's a sample webhook payload to trigger the workflow:
POST http://your-n8n-instance/webhook/pitch-deck-workflow
Content-Type: application/json
{
"company_name": "Acme Analytics",
"industry": "SaaS",
"tagline": "Real-time financial intelligence for mid-market companies",
"problem_statement": "CFOs spend 40% of their time gathering and reconciling financial data across systems",
"solution": "Unified dashboard that pulls from all accounting tools and auto-generates insights",
"revenue": 250000,
"costs": 180000,
"growth_rate": 0.25,
"monthly_burn": 15000,
"runway_months": 18,
"revenue_target": 2000000,
"market_data": {
"tam": 50000000000,
"current_addressable_market": 2000000000
},
"recipient_email": "founder@acmeanalytics.com"
}
The Manual Alternative
If you prefer more granular control over each step, or if you need to review data before it moves to the next stage, you can decouple the workflow.
Run each tool independently:
- Upload your spreadsheet to evalyze-ai, download the analysis JSON
- Take that JSON, review it in a spreadsheet, then upload it to finster-ai
- Review the market positioning output, then manually compile everything into preswald-ai's input format
- Download the deck and send it to the team
This approach gives you checkpoints, but it reintroduces manual handoffs and delays. Most teams find the fully automated version actually builds more trust because you can audit the inputs and outputs without worrying about transcription errors.
If you absolutely need human approval at certain points, modify the workflow to pause before calling preswald-ai. Add a conditional node that only proceeds if you've manually approved the market positioning data. n8n's "Wait for Webhook" node is useful here: the workflow pauses until you send an approval signal via email or a simple web form.
Pro Tips
1. Rate limiting and throttling
All three tools have rate limits. evalyze-ai allows 100 requests per minute on the professional plan; finster-ai allows 50 per minute; preswald-ai allows 20 per minute. When building your workflow, start with small batches. If you're processing 50 decks, don't trigger all 50 at once. Use n8n's "Limit" node to process them in batches of five with a 2-second delay between each. This avoids hitting rate limits and keeps API response times snappy:
Limit node configuration:
Max simultaneous executions: 1
Max executions per 60 seconds: 50
2. Error handling and retries
Network hiccups happen. Add a Try-Catch node around each HTTP request. If evalyze-ai times out, retry after 5 seconds:
HTTP Request node > Error handling:
Retry: Yes
Max retries: 3
Retry interval: 5 seconds
Continue on error: No
If an error occurs, log it to a database or send it to an error-tracking tool like Sentry so you can investigate why decks didn't generate.
3. Cost optimisation
Don't call finster-ai if you're generating an internal deck for your own team. Add a conditional node:
IF: {{ $json.body.is_external }} == true
THEN: call finster-ai
ELSE: skip to preswald-ai with basic market data
This cuts API costs by roughly 30% for internal use cases.
4. Template versioning
preswald-ai supports multiple deck templates. Test with "investment_pitch" first, but try "executive_summary" for shorter decks aimed at busy investors. Store your preferred template in an n8n variable so you can switch easily:
Set node: "template_preference" = {{ $json.body.deck_template || "investment_pitch" }}
5. Data validation before processing
Before sending anything to evalyze-ai, validate that your financial data is sensible. Add a node to check that revenue is higher than costs, runway is positive, and growth rate is realistic:
If: {{ $json.body.revenue > $json.body.costs }} AND {{ $json.body.runway_months > 0 }}
Then: proceed to evalyze-ai
Else: return error message
This prevents nonsensical data from corrupting your analysis.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| evalyze-ai | Professional | $199 | 100 requests/min; includes API access |
| finster-ai | Plus | $149 | 50 requests/min; market data included |
| preswald-ai | Team | $299 | Unlimited deck generation; PDF export |
| n8n | Cloud Professional | $50 | Self-hosted option costs only hosting |
| Google Drive | Workspace Business Standard | $14/user | If you need document storage |
| Slack | Pro | $12.50/user/month | Only if not already using it |
| Total (3 users) | ~$900 | One-time setup, then scaling marginal cost |
The investment makes sense once you're generating more than 4-5 pitch decks per month. Time saved: roughly 8 hours per deck, or 32-40 hours monthly. At an all-in cost of $300/month for tools (excluding Slack and Drive, which you likely have already), you're spending about $10 per hour saved. Most teams pay that back within the first month.
If you're evaluating alternatives: Zapier costs more (~$100/month for a mid-complexity workflow) and offers less transparency into data flow. Make (Integromat) sits in the middle on price but has a steeper learning curve. Claude Code is worth considering if you're comfortable writing Python; you can call APIs directly without a no-code platform, though you'll need to host it yourself.
Start with the 14-day free trials for evalyze-ai, finster-ai, and preswald-ai. Build your workflow, test it with a few real financial datasets, then commit to the paid plans once you see the time savings.
More Recipes
Automated Podcast Production Workflow
Automated Podcast Production Workflow: From Raw Audio to Published Episode
Build an Automated YouTube Channel with AI
Build an Automated YouTube Channel with AI
Medical device regulatory documentation from technical specifications
Medtech companies spend significant resources translating technical specs into regulatory-compliant documentation.