Claude Code skill pack for Finta (18 skills)
Installation
Open Claude Code and run this command:
/plugin install finta-pack@claude-code-plugins-plus
Use --global to install for all projects, or --project for current project only.
Skills (18)
Automate Finta data export and reporting in CI pipelines.
Finta CI Integration
Overview
Set up CI/CD for Finta fundraising integrations: run unit tests with mocked investor pipeline data on every PR, validate live API connectivity for round and investor queries on merge to main. Finta centralizes fundraising CRM data including rounds, investor contacts, and pipeline stages, so CI focuses on verifying data sync logic, pipeline stage transitions, and automated investor reporting workflows.
GitHub Actions Workflow
# .github/workflows/finta-ci.yml
name: Finta CI
on:
pull_request:
paths: ['src/finta/**', 'tests/**']
push:
branches: [main]
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm ci
- run: npm test -- --reporter=verbose
integration-tests:
if: github.ref == 'refs/heads/main'
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm ci
- run: npm run test:integration
env:
FINTA_API_KEY: ${{ secrets.FINTA_API_KEY }}
Mock-Based Unit Tests
// tests/finta-service.test.ts
import { describe, it, expect, vi } from 'vitest';
import { summarizeRound } from '../src/finta-service';
const mockRound = {
id: 'round_seed_01',
name: 'Seed Round',
target_amount: 2_000_000,
raised_amount: 1_250_000,
investors: [
{ name: 'Acme Ventures', committed: 500_000, stage: 'committed' },
{ name: 'Beta Capital', committed: 750_000, stage: 'committed' },
],
};
vi.mock('../src/finta-client', () => ({
FintaClient: vi.fn().mockImplementation(() => ({
getRound: vi.fn().mockResolvedValue(mockRound),
listInvestors: vi.fn().mockResolvedValue({ investors: mockRound.investors, total: 2 }),
getPipelineSummary: vi.fn().mockResolvedValue({ stages: { committed: 2, in_progress: 3 } }),
})),
}));
describe('Finta Service', () => {
it('summarizes fundraising round progress', async () => {
const summary = await summarizeRound('round_seed_01');
expect(summary.percentRaised).toBeCloseTo(62.5);
expect(summary.investorCount).toBe(2);
});
});
Integration Tests
// tests/integration/finta.integration.test.ts
import { describe, it, expect } from 'vitest';
const hasKey = !!process.env.FINTA_API_KEY;
describe.skipIf(!hasKey)('Finta Live API', () => {
it('lists fundraising rounds', async () => {
const res = await fetch('https://api.finta.io/v1/rounds', {
headers: { Authorization: `Bearer ${process.env.FINTA_API_KEY}` },
});
Diagnose and fix common Finta CRM issues with email sync, deal rooms, and pipeline.
Finta Common Errors
Overview
Finta is a fundraising CRM that manages investor pipelines, deal rooms, email sync, and payment collection for startups raising capital. Common errors involve round state transition violations (e.g., moving a round backward from "Closing" to "Outreach"), investor deduplication failures during CSV imports, and pipeline sync breakdowns between email providers and the deal tracker. Aurora AI suggestions depend on complete company profiles, and incomplete data is the top cause of empty recommendations. This reference covers API-level errors and CRM workflow issues that disrupt fundraising operations.
Error Reference
| Code | Message | Cause | Fix |
|---|---|---|---|
400 |
Invalid round transition |
Moving round to an invalid state | Follow valid transitions: Draft > Active > Closing > Closed |
401 |
Invalid API key |
Expired or revoked FINTAAPIKEY |
Regenerate at Settings > API Access |
404 |
Investor not found |
Deleted or merged investor record | Search by email to find merged record |
409 |
Duplicate investor |
Email already exists in pipeline | Use dedup endpoint before CSV import |
422 |
Missing required fields |
Incomplete investor or round data | Include name, email, stage at minimum |
429 |
Rate limit exceeded |
Too many API calls | Implement backoff; batch operations where possible |
500 |
Pipeline sync failed |
Email provider OAuth expired | Reconnect Gmail/Outlook at Settings > Integrations |
502 |
Stripe webhook failed |
Payment collection error | Verify Stripe integration and webhook URL |
Error Handler
interface FintaError {
code: number;
message: string;
category: "auth" | "rate_limit" | "validation" | "sync";
}
function classifyFintaError(status: number, body: string): FintaError {
if (status === 401) {
return { code: 401, message: body, category: "auth" };
}
if (status === 429) {
return { code: 429, message: "Rate limit exceeded", category: "rate_limit" };
}
if (status === 400 || status === 404 || status === 409 || status === 422) {
return { code: status, message: body, category: "validation" };
}
return { code: status, message: body, category: "sync" };
}
Manage a fundraise pipeline end-to-end with Finta.
Finta Core Workflow: Fundraise Pipeline
Overview
End-to-end fundraise management with Finta: prospect investors, manage outreach, track meetings, handle due diligence, and close commitments.
Instructions
Step 1: Investor Prospecting with Aurora AI
Aurora AI analyzes your company profile and recommends investors based on:
- Thesis alignment (sector, stage, geography)
- Historical investment behavior
- Warm introduction availability from your network
Navigate to Investors > Discover and review AI-ranked suggestions.
Step 2: Outreach Campaign
- Select investors to contact
- Use Finta's AI-assisted email composer for personalized outreach
- Finta auto-tracks replies and updates pipeline stages
Stage automation rules:
- Investor opens email --> "Reaching Out" (stays)
- Investor replies --> auto-advance to "Intro Meeting"
- Meeting scheduled --> confirm via calendar sync
Step 3: Deal Room Setup
For each active conversation:
- Create a Deal Room with relevant materials
- Upload: pitch deck, financial model, cap table, team bios
- Share link with investor
- Monitor analytics: views, time spent, pages viewed
Step 4: Due Diligence Management
- Create a Data Room for detailed document sharing
- Organize by category: legal, financial, technical, team
- Set permission-based access (view-only, download, etc.)
- Track which documents investors have reviewed
Step 5: Close and Collect
- Move investor to "Term Sheet" stage when term sheet received
- Review terms in Finta's term sheet comparison view
- Accept and move to "Closed"
- Use Stripe/ACH integration to send payment links
- Collect committed capital directly through Finta
Fundraise Metrics Dashboard
Track in Finta or export for custom analysis:
- Total pipeline value
- Conversion rate by stage
- Average time in each stage
- Top investor engagement (deal room views)
- Warm intro utilization rate
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Emails not tracking | OAuth disconnected | Reconnect in Settings |
| Deal room views not logging | Browser blocking | Share via direct email |
| Payment link expired | Stripe session timeout | Generate new link |
| Aurora suggestions poor | Incomplete profile | Complete all company fields |
Resources
Manage ongoing investor relations and updates with Finta.
Finta Core Workflow: Investor Relations
Overview
Post-fundraise investor management: send periodic updates, share metrics, manage cap table, and maintain relationships for future rounds.
Instructions
Investor Updates
- Go to Updates > New Update
- Select template (monthly, quarterly, or custom)
- Finta auto-populates metrics from connected financial tools:
- MRR/ARR from Stripe
- Cash and burn rate from Mercury/Brex
- Runway calculation
- Add qualitative updates (milestones, challenges, asks)
- Send to all investors or select groups
Update Template
Subject: [Company] Monthly Update - March 2026
Key Metrics:
- MRR: $X (up Y% MoM)
- ARR: $X
- Burn Rate: $X/month
- Runway: X months
- Headcount: X
Highlights:
- [Achievement 1]
- [Achievement 2]
Challenges:
- [Challenge and plan to address]
Asks:
- Introductions to [specific companies/people]
- Feedback on [specific topic]
Warm Introduction Network
Finta's network feature identifies 2nd-degree connections:
- Go to Network > Find Introductions
- Select target investor
- Finta shows mutual connections from your team, advisors, and existing investors
- Request introduction through the platform
Cap Table Tracking
- Import cap table from Carta, Pulley, or CSV
- Track ownership percentages after each round
- Model dilution for future rounds
- Export for legal and compliance
Resources
Next Steps
For troubleshooting, see finta-common-errors.
Optimize Finta plan selection and feature usage.
Finta Cost Tuning
Overview
Finta pricing is per-seat with tiered feature access, and the primary cost driver is investor pipeline sync volume. Each fundraising round generates hundreds of investor interactions — updates, document shares, and payment collections — that all flow through Finta's API. Over-syncing investor data, maintaining unused deal rooms, and keeping inactive seats during non-fundraising periods waste budget. Strategic plan selection and sync optimization ensure you only pay for what active fundraising demands.
Cost Breakdown
| Component | Cost Driver | Optimization |
|---|---|---|
| Seat licenses | Per-user/month pricing | Remove seats between fundraising rounds |
| Deal rooms | Each active deal room consumes quota | Archive completed deal rooms promptly |
| Investor pipeline syncs | API calls per investor update | Batch investor updates; sync only changed records |
| Payment processing | Stripe/ACH transaction fees | Consolidate payment rounds to minimize transactions |
| Document sharing | Storage and delivery per shared document | Deduplicate documents; use shared links over copies |
API Call Reduction
class FintaPipelineSync {
private lastSyncTimestamp = 0;
private investorCache = new Map<string, { data: any; hash: string }>();
async incrementalSync(investors: any[]): Promise<any[]> {
const changed = investors.filter(inv => {
const cached = this.investorCache.get(inv.id);
const currentHash = this.hashInvestor(inv);
if (cached && cached.hash === currentHash) return false;
this.investorCache.set(inv.id, { data: inv, hash: currentHash });
return true;
});
// Only sync investors with actual changes — typically reduces calls by 60-80%
return this.batchUpdate(changed);
}
private hashInvestor(inv: any): string {
return JSON.stringify({ status: inv.status, amount: inv.amount, stage: inv.stage });
}
private async batchUpdate(investors: any[]): Promise<any[]> {
// Chunk into batches of 25 to stay within rate limits
const size = 25;
const batches = Array.from({ length: Math.ceil(investors.length / size) },
(_, i) => investors.slice(i * size, i * size + size));
return Promise.all(batches.map(batch => fetch('/api/investors/bulk', {
method: 'POST', body: JSON.stringify(batch)
})));
}
}
Usage Monitoring
class FintaCostTracker {
private syncsToday = 0;
private dailyBudget = 500;
recordSync(investorCount: number): void {
this.syncsToday += investorCount;
const utilization = (this.syncsToday / this.dailyBudget) * 100;
if (utilizationCollect Finta diagnostic information for support.
Finta Debug Bundle
Overview
Collect Finta API connectivity status, fundraising round data, investor pipeline health, and integration state into a single diagnostic archive. This bundle helps troubleshoot CRM sync failures, missing investor records, round update errors, and authentication problems. Attach the output to Finta support tickets for faster resolution of fundraising workflow issues.
Debug Collection Script
#!/bin/bash
set -euo pipefail
BUNDLE="debug-finta-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BUNDLE"
# Environment check
echo "=== Finta Debug Bundle ===" | tee "$BUNDLE/summary.txt"
echo "Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$BUNDLE/summary.txt"
echo "FINTA_API_KEY: ${FINTA_API_KEY:+[SET]}" >> "$BUNDLE/summary.txt"
# API connectivity
HTTP=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer ${FINTA_API_KEY}" \
https://api.finta.io/v1/rounds 2>/dev/null || echo "000")
echo "API Status: HTTP $HTTP" >> "$BUNDLE/summary.txt"
# Fundraising rounds summary
curl -s -H "Authorization: Bearer ${FINTA_API_KEY}" \
"https://api.finta.io/v1/rounds" \
> "$BUNDLE/rounds.json" 2>&1 || true
# Investor records (limited)
curl -s -H "Authorization: Bearer ${FINTA_API_KEY}" \
"https://api.finta.io/v1/investors?limit=10" \
> "$BUNDLE/investors-sample.json" 2>&1 || true
# Connected integrations status
curl -s -H "Authorization: Bearer ${FINTA_API_KEY}" \
"https://api.finta.io/v1/integrations" \
> "$BUNDLE/integrations.json" 2>&1 || true
# Rate limit headers
curl -s -D "$BUNDLE/rate-headers.txt" -o /dev/null \
-H "Authorization: Bearer ${FINTA_API_KEY}" \
https://api.finta.io/v1/rounds 2>/dev/null || true
tar -czf "$BUNDLE.tar.gz" "$BUNDLE" && rm -rf "$BUNDLE"
echo "Bundle: $BUNDLE.tar.gz"
Analyzing the Bundle
tar -xzf debug-finta-*.tar.gz
cat debug-finta-*/summary.txt # Auth + connectivity overview
jq '.[] | {id, name, status}' debug-finta-*/rounds.json # Active rounds
jq 'length' debug-finta-*/investors-sample.json # Investor count check
grep -i "ratelimit\|retry" debug-finta-*/rate-headers.txt
Common Issues
| Symptom | Check in Bundle | Fix | |||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| API returns 401 | summary.txt shows HTTP 401 |
Regenerate API key in Finta Settings > API Keys | |||||||||||||||||||||||||||||||||||||||||||||||||||
| Rounds list empty | rounds.json returns empty array |
Verify rounds exist in Finta dashboard; check workspace permi
Deploy Finta integrations and reporting dashboards.
ReadWriteEdit
Finta Deploy IntegrationOverviewDeploy a containerized Finta fundraising integration service with Docker. This skill covers building a production image that connects to the Finta API for managing fundraising rounds, investor pipelines, and deal flow analytics. Includes environment configuration for multi-round tracking, health checks that verify API connectivity to Finta's investor management endpoints, and rolling update strategies for zero-downtime deployments during active fundraising campaigns. Docker Configuration
Environment Variables
Health Check Endpoint
Deployment StepsStep 1: Build
Step 2: Run
Step 3: Verify
Step 4: Rolling Update
Error HandlingSet up your first fundraise pipeline in Finta with investors and deal stages.
ReadWriteEdit
Finta Hello WorldOverviewCreate your first fundraise pipeline in Finta: add target investors, configure deal stages, and use Aurora AI for investor prospecting. Prerequisites
InstructionsStep 1: Create a New Fundraise
Step 2: Add Target InvestorsManual Entry:
CSV Import:
Aurora AI Prospecting:
Step 3: Track Pipeline ProgressFinta automatically moves investors through stages based on:
Step 4: Set Up Deal Room
Step 5: Send Investor Update
Output
Error Handling
|