Skip to content

Integration Marketplace

This guide covers the integration marketplace powered by Prismatic, including accessing integrations, deploying them organization-wide, and developing custom integrations.

Querri’s integration marketplace provides pre-built connectors to external systems and data sources. The marketplace is powered by Prismatic, an embedded integration platform.

Key features:

  • Pre-built integrations for popular services
  • Organization-wide deployment
  • Custom integration development
  • Integration monitoring and management
  • User-specific configuration

Integration marketplace access requires:

  • Admin role (is_admin=true or @querri.com email)
  • Organization administrator privileges

Required environment variables in .env-prod:

Terminal window
# Prismatic Private Key (RSA)
PRISMATIC_KEY='-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCYEK3L...
-----END PRIVATE KEY-----'
# Prismatic API Token
PRISMATIC_TOKEN='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6...'
# Prismatic Refresh Token
PRISMATIC_REFRESH='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Navigate to the integration marketplace:

https://app.yourcompany.com/settings/integrations

Access restrictions:

  • Only visible to admin users
  • 404 error for non-admin users
  • Requires valid Prismatic configuration

The marketplace displays:

  • Available integrations
  • Deployed integrations
  • Integration status
  • Configuration options
  • User instances

Common integrations available in the marketplace:

  • Salesforce - CRM data sync, lead management
  • HubSpot - Marketing and sales data
  • Microsoft Dynamics - Enterprise CRM
  • Google Workspace - Sheets, Drive, Calendar
  • Microsoft 365 - Excel, SharePoint, Teams
  • Slack - Notifications and messaging
  • QuickBooks - Financial data and transactions
  • Xero - Accounting data
  • NetSuite - ERP integration
  • Snowflake - Cloud data warehouse
  • BigQuery - Google analytics warehouse
  • Redshift - AWS data warehouse
  • PostgreSQL - SQL database connection
  • MySQL - MySQL database connection
  • MongoDB - NoSQL database (external)
  • AWS S3 - Cloud file storage
  • Azure Blob - Microsoft cloud storage
  • Google Drive - Document storage
  • Mailchimp - Email marketing
  • SendGrid - Transactional email
  • Google Analytics - Web analytics

Each integration provides:

  • Data import - Pull data into Querri
  • Data export - Push data to external systems
  • Real-time sync - Continuous data synchronization
  • Scheduled sync - Batch data transfers
  • Webhooks - Event-driven updates

Deploy integrations for all organization members:

  1. Navigate to marketplace:

    /settings/integrations
  2. Select integration to deploy

  3. Configure integration settings:

    • API credentials
    • Connection parameters
    • Default sync schedule
    • Data mapping
  4. Deploy integration - Makes available to all users

  5. Verify deployment - Test connection and data flow

  1. Click Salesforce in marketplace

  2. Enter configuration:

    Instance URL: https://yourcompany.salesforce.com
    Client ID: [Salesforce Connected App Client ID]
    Client Secret: [Salesforce Connected App Secret]
    Security Token: [User Security Token]
  3. Configure sync settings:

    Sync Frequency: Every 6 hours
    Objects to Sync: Accounts, Contacts, Opportunities
    Field Mapping: Auto-detect
  4. Click Deploy Integration

  5. Test connection:

    Status: Connected
    Last Sync: Just now
    Records Synced: 1,247

Some integrations require per-user configuration:

  1. Admin deploys integration organization-wide

  2. Users configure their personal connection:

    /settings/connectors
  3. Users authenticate with their credentials

  4. User-specific data becomes available in Querri

View deployed integration instances:

// Connect to MongoDB
db.integrations.find({
organization_id: "org_xxxxxxxxxxxxx",
status: "active"
})

Example output:

{
_id: "int_xxxxxxxxxxxxx",
integration_name: "Salesforce",
organization_id: "org_xxxxxxxxxxxxx",
status: "active",
config: {
instance_url: "https://yourcompany.salesforce.com",
sync_frequency: 21600 // 6 hours in seconds
},
deployed_at: "2024-01-15T10:00:00Z",
deployed_by: "admin@company.com"
}

Check integration health:

  1. Navigate to Settings > Integrations

  2. View integration list with status:

    Salesforce ● Active Last sync: 10 minutes ago
    Google Sheets ● Active Last sync: 1 hour ago
    QuickBooks ⚠ Warning Auth expired
  3. Click integration for details:

    • Connection status
    • Sync history
    • Error logs
    • Usage statistics

Modify integration settings:

  1. Click integration in marketplace

  2. Select Configure

  3. Update settings:

    • API credentials
    • Sync schedule
    • Data filters
    • Field mappings
  4. Save Changes

  5. Restart integration if needed

Temporarily disable an integration:

// Pause integration
db.integrations.updateOne(
{_id: "int_xxxxxxxxxxxxx"},
{
$set: {
status: "paused",
paused_at: new Date(),
paused_by: "admin@company.com"
}
}
)
// Resume integration
db.integrations.updateOne(
{_id: "int_xxxxxxxxxxxxx"},
{
$set: {
status: "active",
resumed_at: new Date()
},
$unset: {paused_at: "", paused_by: ""}
}
)

Undeploy an integration:

  1. Click integration in marketplace

  2. Select Remove Integration

  3. Confirm removal (this will affect all users)

  4. Integration data handling options:

    • Keep historical data
    • Remove all integration data
    • Export data before removal

View integration sync history:

// View sync logs
db.integration_logs.find({
integration_id: "int_xxxxxxxxxxxxx"
}).sort({timestamp: -1}).limit(20)

Example log entry:

{
_id: "log_xxxxxxxxxxxxx",
integration_id: "int_xxxxxxxxxxxxx",
sync_type: "scheduled",
status: "success",
records_processed: 247,
records_created: 12,
records_updated: 235,
records_failed: 0,
duration_ms: 3456,
timestamp: "2024-01-15T10:00:00Z"
}

Monitor integration errors:

// Find recent errors
db.integration_logs.find({
integration_id: "int_xxxxxxxxxxxxx",
status: "error"
}).sort({timestamp: -1}).limit(10)

Common error types:

  • Authentication failure - Expired credentials
  • Rate limit - API quota exceeded
  • Network error - Connection timeout
  • Data validation - Invalid field values
  • Permission denied - Insufficient API permissions

View integration usage metrics:

// Integration usage summary
db.integration_logs.aggregate([
{
$match: {
integration_id: "int_xxxxxxxxxxxxx",
timestamp: {$gte: new Date(Date.now() - 30*24*60*60*1000)}
}
},
{
$group: {
_id: null,
total_syncs: {$sum: 1},
total_records: {$sum: "$records_processed"},
success_rate: {
$avg: {$cond: [{$eq: ["$status", "success"]}, 1, 0]}
}
}
}
])

Develop custom integrations using Prismatic CLI:

Terminal window
npm install -g @prismatic-io/prism
Terminal window
# Login to Prismatic
prism login
Terminal window
# Create new integration
prism integration:create --name "Custom ERP Integration"
# Generate component
prism component:create --name "ERP Connector"

components/erp-connector/index.ts:

import { component } from "@prismatic-io/spectral";
export default component({
key: "erp-connector",
public: false,
display: {
label: "Custom ERP Connector",
description: "Connect to internal ERP system",
},
actions: {
fetchOrders: {
display: {
label: "Fetch Orders",
description: "Retrieve orders from ERP",
},
inputs: {
apiKey: {
label: "API Key",
type: "string",
required: true,
},
startDate: {
label: "Start Date",
type: "string",
required: true,
},
},
perform: async (context, { apiKey, startDate }) => {
// Implementation
const response = await fetch(`https://erp.company.com/api/orders`, {
headers: {
'Authorization': `Bearer ${apiKey}`,
},
});
return { data: await response.json() };
},
},
},
});
Terminal window
# Build component
prism component:build
# Publish to Prismatic
prism component:publish
# Deploy to Querri
prism integration:deploy --integration "Custom ERP Integration"

Define configuration UI in Prismatic:

name: Custom ERP Integration
description: Integration with internal ERP system
configVariables:
- key: apiKey
dataType: string
required: true
description: API key for ERP system
- key: baseUrl
dataType: string
required: true
description: Base URL for ERP API
- key: syncFrequency
dataType: picklist
required: true
pickList:
- "1 hour"
- "6 hours"
- "24 hours"

Test integrations before deployment:

Terminal window
# Run integration tests
prism integration:test --integration "Custom ERP Integration"
# Test specific action
prism action:test --action "fetchOrders" --input '{"apiKey": "test", "startDate": "2024-01-01"}'
# Deploy to staging
prism integration:deploy --integration "Custom ERP Integration" --environment staging

Store integration credentials securely:

  1. Never commit credentials to version control

  2. Use Prismatic secrets for sensitive data:

    // In Prismatic configuration
    {
    configVariables: [
    {
    key: "apiKey",
    dataType: "string",
    required: true,
    secure: true // Encrypted storage
    }
    ]
    }
  3. Rotate credentials regularly (quarterly recommended)

Request minimum required API permissions:

Example: Salesforce

Scopes: api, refresh_token, offline_access
Objects: Account (read), Contact (read), Opportunity (read/write)

Track integration access:

// Log integration usage
db.integration_audit.insertOne({
integration_id: "int_xxxxxxxxxxxxx",
action: "data_sync",
user_email: "user@company.com",
records_accessed: 247,
timestamp: new Date(),
ip_address: "203.0.113.42"
})

Issue: Integration shows “Disconnected”

Solutions:

  1. Verify API credentials are current
  2. Check network connectivity
  3. Review API provider status page
  4. Test API endpoint manually:
    Terminal window
    curl -H "Authorization: Bearer TOKEN" https://api.service.com/test

Issue: “Authentication failed” or “Invalid credentials”

Solutions:

  1. Refresh OAuth tokens
  2. Regenerate API keys
  3. Check credential expiration dates
  4. Verify permission scopes

Issue: Data not syncing or incomplete

Solutions:

  1. Check sync logs for errors:

    db.integration_logs.find({status: "error"})
  2. Verify field mappings are correct

  3. Check for data type mismatches

  4. Review API rate limits

  5. Manual sync trigger:

    Settings > Integrations > [Integration] > Sync Now

Issue: “Rate limit exceeded” errors

Solutions:

  1. Reduce sync frequency
  2. Implement batch processing
  3. Request higher API limits from provider
  4. Use pagination for large datasets
  1. Test in development - Verify integration before production deployment
  2. Document configuration - Keep record of settings and credentials
  3. Monitor after deployment - Watch for errors in first 24 hours
  4. Communicate to users - Notify when new integrations are available
  1. Regular health checks - Weekly review of integration status
  2. Update credentials - Rotate API keys quarterly
  3. Monitor usage - Track API call volumes and costs
  4. Review permissions - Ensure minimum required scopes
  1. Optimize sync frequency - Balance freshness vs. API costs
  2. Filter unnecessary data - Only sync required fields/records
  3. Use incremental sync - Delta sync for large datasets
  4. Schedule strategically - Off-peak hours for large syncs

Some integrations may incur external costs:

  • Salesforce - API call limits by edition
  • Google - Free tier, then per-request pricing
  • AWS S3 - Storage and transfer costs
  • Snowflake - Compute and storage costs

Track API usage to avoid overages:

// Monthly API call count by integration
db.integration_logs.aggregate([
{
$match: {
timestamp: {
$gte: new Date(new Date().getFullYear(), new Date().getMonth(), 1)
}
}
},
{
$group: {
_id: "$integration_id",
api_calls: {$sum: "$api_calls"},
cost_estimate: {$sum: "$cost_usd"}
}
}
])