Documentation Index
Fetch the complete documentation index at: https://mintlify.com/manusapis/Agix/llms.txt
Use this file to discover all available pages before exploring further.
Beyond Stripe and SQL, Agix ships five connectors for the most common CRM, analytics, and productivity platforms. Each connector follows the same IConnector interface — authenticate once with connect(), then call sync() with a resource name to write rows into the active sheet. This uniform pattern means the skills you learn for one connector transfer directly to every other.
Common connector pattern
All five connectors on this page extend BaseConnector and are instantiated through the same factory function:
import { createConnector, getSupportedConnectors } from "@/services/connectors/connector.factory";
// Retrieve the full list of registered connector types
const types = getSupportedConnectors();
// ["stripe", "salesforce", "hubspot", "google-analytics", "notion", "airtable", "sql"]
// Instantiate any connector by its ConnectorType identifier
const salesforce = createConnector("salesforce");
const hubspot = createConnector("hubspot");
const ga = createConnector("google-analytics");
const notion = createConnector("notion");
const airtable = createConnector("airtable");
Once instantiated, every connector exposes the same lifecycle:
// 1. Authenticate
await connector.connect({
type: "salesforce", // replace with the relevant ConnectorType
name: "Production Org",
credentials: { /* service-specific keys */ },
enabled: true,
});
// 2. Sync a resource into the active sheet
const result = await connector.sync({
connector: "salesforce",
resource: "Opportunity", // object name, table, report ID, or database ID
});
console.log(result.rowsInserted, result.rowsUpdated, result.syncedAt);
// 3. Disconnect when finished
await connector.disconnect();
Connector reference
Salesforce
HubSpot
Google Analytics
Notion
Airtable
SalesforceConnector pulls records from your Salesforce org. Set ConnectorType to "salesforce". Use sync() with resource set to a Salesforce object name (e.g. "Opportunity", "Lead", "Account", "Case") to load that object’s records into the sheet.Common use cases:
- Load open opportunities into a sheet and ask Agix to rank them by close probability.
- Pull the
Lead object and analyse conversion rates by source, region, or sales rep.
- Sync
Account records to build an account-health dashboard that updates on a schedule.
ConnectorType identifier: "salesforce"import { createConnector } from "@/services/connectors/connector.factory";
import type { ConnectorConfig, SyncRequest } from "@/types/connector.types";
const connector = createConnector("salesforce");
const config: ConnectorConfig = {
type: "salesforce",
name: "Sales Org",
credentials: {
instanceUrl: "https://yourorg.my.salesforce.com",
accessToken: "...",
},
enabled: true,
};
await connector.connect(config);
const request: SyncRequest = {
connector: "salesforce",
resource: "Opportunity",
since: "2024-01-01T00:00:00Z", // optional: incremental sync
};
const result = await connector.sync(request);
// result.rowsInserted + result.rowsUpdated = total opportunity records synced
The optional since field on SyncRequest lets you perform incremental syncs — only records modified after the supplied ISO timestamp are pulled, keeping sheet updates fast even for large orgs.HubSpotConnector connects to the HubSpot CRM and Marketing platform. Set ConnectorType to "hubspot". Pass a HubSpot object name as resource — for example "contacts", "deals", "companies", or "tickets" — and Agix writes the matching records into the sheet.Common use cases:
- Pull
deals and ask Agix to identify pipeline bottlenecks by deal stage.
- Sync
contacts and use AI-powered sentiment analysis on the notes field.
- Load
tickets to track support volume trends over time and forecast staffing needs.
ConnectorType identifier: "hubspot"import { createConnector } from "@/services/connectors/connector.factory";
import type { ConnectorConfig, SyncRequest } from "@/types/connector.types";
const connector = createConnector("hubspot");
const config: ConnectorConfig = {
type: "hubspot",
name: "HubSpot CRM",
credentials: {
accessToken: "pat-na1-...",
},
enabled: true,
};
await connector.connect(config);
const request: SyncRequest = {
connector: "hubspot",
resource: "deals",
};
const result = await connector.sync(request);
Use a HubSpot Private App token for the accessToken credential — Private Apps offer fine-grained scope control and do not expire like OAuth tokens tied to a specific user session.GoogleAnalyticsConnector pulls reporting data from Google Analytics 4. Set ConnectorType to "google-analytics". The resource field on SyncRequest maps to a GA4 report name or dimension/metric combination that Agix resolves against your property.Common use cases:
- Sync session and conversion data into a sheet for weekly marketing-performance reporting.
- Pull page-level engagement metrics and ask Agix to identify which content drives the most qualified traffic.
- Compare traffic cohorts across campaigns without exporting CSV files from the GA4 UI.
ConnectorType identifier: "google-analytics"import { createConnector } from "@/services/connectors/connector.factory";
import type { ConnectorConfig, SyncRequest } from "@/types/connector.types";
const connector = createConnector("google-analytics");
const config: ConnectorConfig = {
type: "google-analytics",
name: "Main Property",
credentials: {
propertyId: "properties/123456789",
serviceAccountKey: "...", // JSON key as a string, or path to key file
},
enabled: true,
};
await connector.connect(config);
const request: SyncRequest = {
connector: "google-analytics",
resource: "sessions_by_source",
since: "2024-06-01T00:00:00Z",
};
const result = await connector.sync(request);
Use a Google service account with the Viewer role on your GA4 property. Avoid analyst or editor roles unless you specifically need them — Agix only reads data.NotionConnector pulls pages and database rows from Notion. Set ConnectorType to "notion". Pass a Notion database ID as resource, and Agix fetches all rows from that database and writes them into the active sheet as a structured table.Common use cases:
- Mirror a Notion project-tracking database into a spreadsheet for stakeholder reporting without granting Notion access to external parties.
- Sync a Notion content calendar into Sheets and ask Agix to analyse publishing cadence and topic distribution.
- Pull a Notion OKR database and use AI to generate a progress summary for leadership reviews.
ConnectorType identifier: "notion"import { createConnector } from "@/services/connectors/connector.factory";
import type { ConnectorConfig, SyncRequest } from "@/types/connector.types";
const connector = createConnector("notion");
const config: ConnectorConfig = {
type: "notion",
name: "Workspace",
credentials: {
apiKey: "secret_...",
},
enabled: true,
};
await connector.connect(config);
const request: SyncRequest = {
connector: "notion",
resource: "a1b2c3d4-e5f6-7890-abcd-ef1234567890", // Notion database ID
};
const result = await connector.sync(request);
Create a Notion integration at notion.so/my-integrations and share only the specific databases Agix needs access to. The integration will not be able to read databases that have not been explicitly shared with it.AirtableConnector syncs records from Airtable bases. Set ConnectorType to "airtable". Provide a base ID and table name (or view name) as resource, and Agix loads the matching records into the sheet.Common use cases:
- Pull an Airtable product roadmap into Excel for capacity planning and timeline modelling.
- Sync a client-onboarding tracker and ask Agix to surface clients who are falling behind schedule.
- Load an Airtable inventory base and use AI forecasting to predict reorder points.
ConnectorType identifier: "airtable"import { createConnector } from "@/services/connectors/connector.factory";
import type { ConnectorConfig, SyncRequest } from "@/types/connector.types";
const connector = createConnector("airtable");
const config: ConnectorConfig = {
type: "airtable",
name: "Product Base",
credentials: {
apiKey: "pat...", // Airtable personal access token
baseId: "appXXXXXXXXXXXXXX",
},
enabled: true,
};
await connector.connect(config);
const request: SyncRequest = {
connector: "airtable",
resource: "Roadmap", // table or view name within the base
};
const result = await connector.sync(request);
Use an Airtable personal access token (not the legacy API key) and scope it to the minimum set of bases and tables Agix requires. Tokens can be revoked individually without affecting other integrations.
getSupportedConnectors()
To enumerate every registered connector type at runtime — for example when building a dynamic connector-selection UI or validating user input — call getSupportedConnectors() from the factory:
import { getSupportedConnectors } from "@/services/connectors/connector.factory";
const types = getSupportedConnectors();
// ["stripe", "salesforce", "hubspot", "google-analytics", "notion", "airtable", "sql"]
The returned array reflects the live registry map, so any connector added to connector.factory.ts will automatically appear here without further changes.