An Attio app that integrates with Parallel's Web Systems monitoring API to automatically track and log company news updates.
This app allows you to:
- Create Parallel monitors for Company records in Attio
- Automatically receive webhook notifications when news events are detected
- Store structured Markdown updates in Company attributes
- Track monitor status and last check times
- One-click setup: Create a Parallel monitor directly from any Company record
- Idempotent: Prevents duplicate monitors for the same company
- Customizable: Configure query and cadence (hourly/daily/weekly)
- Status tracking: Monitor status displayed in Company attributes
- Real-time updates: Webhooks deliver news events as they're detected
- Structured logging: Markdown-formatted updates with dates, sources, and detection timestamps
- Deduplication: Automatically prevents duplicate event entries
- Error handling: Robust handling of failures with status updates
The app creates and manages these attributes on Company records:
| Attribute | Type | Description |
|---|---|---|
parallel_monitor_id |
Text | The ID of the active Parallel monitor |
monitor_status |
Select | Current status: none, active, paused, failed |
last_news_check |
Date | Last time the monitor checked for news |
news_updates |
Text (multiline) | Markdown log of news updates (reverse-chronological) |
npm install- In Attio, go to Settings → Apps → Parallel
- Click Add Connection
- Select Secret as the connection type
- Enter your Parallel API key from Parallel Dashboard
- Save the connection
Note: Each user needs to configure their own connection before using the app. The error "no user connection" means you haven't set up this connection yet.
npm run build
npm run attio deploy- Open any Company record in Attio
- Click the "Monitor Company News" action
- Customize the query (or use the default)
- Select monitoring cadence (hourly, daily, or weekly)
- Click "Create Monitor"
The default query template:
Extract recent news and material updates about [Company Name].
Focus on product launches, funding, partnerships, and leadership changes.
News updates appear in the news_updates attribute on the Company record in reverse-chronological order:
### Event Date: 2025-01-15
Detected: 2025-01-15T20:30:00Z
EventGroupID: mevtgrp_abcdef
[Parallel event output content here]
Sources:
- https://example.com/article1
- https://example.com/article2
---Check the monitor_status attribute:
- active: Monitor is running normally
- paused: Monitor is temporarily disabled
- failed: Monitor encountered an error
- none: No monitor configured
- Start the dev server:
npm run dev- Use a tunnel (e.g., ngrok) to expose webhooks:
ngrok http 3000- Update your Parallel webhook URL to point to your tunnel
The webhook endpoint is: /webhooks/parallel-monitor-events
Example webhook payload:
{
"type": "monitor.event.detected",
"timestamp": "2025-10-27T14:56:05.619331Z",
"data": {
"monitor_id": "monitor_xxx",
"event": {
"event_group_id": "mevtgrp_xxx"
},
"metadata": {
"company_record_id": "company_uuid",
"company_name": "Acme Corp",
"created_by": "user@example.com"
}
}
}Run type checking:
npm run buildRun formatting:
npm run formatRun linting:
npm run lintFix linting issues:
npm run lint:fixsrc/
├── app.ts # Main app entry point
├── app.settings.ts # App settings schema
├── parallel/ # Parallel API integration
│ ├── parallel-client.ts # Generic API client
│ ├── parallel-error.ts # Error handling
│ └── monitors/
│ ├── schema.ts # Zod schemas
│ ├── create-monitor.server.ts
│ ├── get-event-group.server.ts
│ └── create-monitor-and-update-company.server.ts
├── attio/ # Attio API integration
│ ├── schemas.ts # Zod schemas
│ ├── ensure-company-attributes.ts
│ ├── get-company.ts
│ ├── find-company-by-monitor.ts
│ └── update-company.ts
├── webhooks/ # Webhook handlers
│ └── parallel-monitor-events.webhook.ts
├── components/ # React components
│ └── create-monitor-dialog.tsx
├── record/actions/ # Record actions
│ └── company-create-monitor-action.tsx
└── utils/ # Utilities
├── logger.ts
└── format-monitor-event.ts
Monitor Creation:
- User clicks action on Company record
- Dialog opens with pre-filled query
- Server creates monitor via Parallel API
- Company record updated with monitor ID and status
Event Ingestion:
- Parallel detects news event
- Webhook sent to Attio app
- App fetches full event group details
- Event formatted as Markdown
- Prepended to Company's news_updates
- last_news_check updated
| Issue | Solution |
|---|---|
| "No user connection" | You haven't configured your Parallel API key connection yet. Go to Attio → Settings → Apps → Parallel → Add Connection → Select "Secret" → Enter your Parallel API key |
| "Connection Error: No connection configured" | Same as above - add your connection in Attio app settings |
| "API key is invalid or expired" | Your Parallel API key is incorrect. Get a fresh key from Parallel Dashboard and update your connection |
| "Monitor already active" | This company already has a monitor. Check the parallel_monitor_id attribute |
| Events not appearing | Check webhook logs; verify webhook URL is correct in Parallel dashboard |
| Monitor status shows "failed" | Check Parallel dashboard for error details |
IMPORTANT: The connection must be configured through the Attio app's connection flow, not as a general workspace connection.
- In Attio, click Settings (gear icon in top right)
- Go to Apps in the left sidebar
- Find Parallel in your installed apps
- Click on it to open app settings
- Look for a Connections section or Configure button
- Click Add Connection or the + button
- You should see a prompt to connect to Parallel
- Enter your Parallel API key from https://parallel.ai
- Save the connection
- Refresh your Attio page
Sometimes Attio will prompt you to configure the connection when you first try to use an action:
- Try clicking the "Monitor Company News" action
- If you see a prompt to "Configure Connection" or "Connect to Parallel", click it
- Enter your Parallel API key
- Save and retry
The app might need to be deployed/published properly. If you're testing locally with npm run dev:
- Make sure the dev server is running
- The connection configuration happens in the Attio platform, not in code
- Try running:
npm run buildthen reload Attio
If you're deploying the app:
- Run:
npm run build - Deploy using:
attio deploy(or your deployment method) - After deployment, configure the connection in Attio UI
- Each user needs to configure their own connection
Note: The connection test now runs automatically when you click the action. You'll get a clear error message if the connection is missing or invalid.
The app uses structured JSON logging. Key log fields:
timestamp: ISO timestamplevel: info, warn, errorevent_type: Type of webhook receivedmonitor_id: Parallel monitor IDcompany_record_id: Attio company record IDevent_group_id: Parallel event group IDerror_msg: Error message if applicable
Enable verbose logging in your Attio app settings.
- Base URL:
https://api.parallel.ai - Auth:
x-api-keyheader (no Bearer prefix) - Docs: Parallel API Documentation
- Docs: Attio SDK Documentation
- API keys stored securely via Attio Secret connections
- Webhook payloads validated with Zod
- All errors return 200 to prevent retry storms
- No sensitive data logged
Private repository. All rights reserved.
For issues or questions:
- Check the troubleshooting section above
- Review logs for error details
- Contact your Parallel support team