Pipelines
A pipeline defines a set of runnable actions composed from datacomponents to complete a set of tasks - for example, ELT. Pipelines are run as jobs, either manually or on a predetermined schedule. Only a single pipeline can be run at any given time.
Objects
Pipeline
| Path | JSON Type | Format | Description |
|---|---|---|---|
id | string | Version 4 UUID | The pipeline ID |
status | string | Pipeline Status | |
name | string | The pipeline name | |
schedule | string | Cron | The interval at which to launch a new job e.g. 0 0 9-17 * * MON-FRI launches a job on the hour nine-to-five weekdays |
timeout | number | Unsigned integer | The number of seconds after which the job will terminate - if set to 0, an implicit default value of 300 seconds is used |
maxRetries | number | Unsigned integer | The maximum number of retries to attempt for a job ending with ERROR |
script | string | Bash script | Custom script to execute during a job |
created | string | ISO 8601 timestamp | When the pipeline was created |
lastModified | string | ISO 8601 timestamp | When the pipeline was last modified |
properties | object | Properties | The pipeline properties, defined by the dataplugin settings of each datacomponentProperties are key-value pairs, where keys reference setting names qualified by datacomponent names |
dataComponents | string[] | Array of datacomponent names | The pipeline datacomponent names or create / update with dataplugin fullyQualifiedName |
actions | string[] | Array of datacomponent names or commands | The pipeline actions to run during a job |
triggeredBy | string[] | Array of pipeline names or workspace task identifiers | Pipelines or workspace tasks that will trigger the pipeline on successful completion Supported values for workspace tasks (case-insensitive):
|
{
"id" : "b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"status" : "READY",
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599] (updated)",
"name" : "sit-generated-pipeline-[2026-04-23t13:09:47.495074599]",
"timeout" : 0,
"maxRetries" : 0,
"created" : "2026-04-23T13:09:47.622971",
"lastModified" : "2026-04-23T13:09:48.071483",
"properties" : {
"tap-google-analytics.start_date" : "2026-03-23T13:09:47.048027582Z",
"tap-google-analytics.property_id" : "1234567890"
},
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ],
"actions" : [ ],
"triggeredBy" : [ ],
"_embedded" : {
"dataComponents" : [ {
"id" : "e8c1225b-48e6-46f8-ad51-559ffba0b046",
"created" : "2026-04-23T13:09:47.138824",
"lastModified" : "2026-04-23T13:09:47.138826",
"name" : "tap-google-analytics",
"properties" : { },
"commands" : { },
"dataPlugin" : "extractors/tap-google-analytics--meltanolabs",
"dataPluginType" : "extractor",
"dataPluginLogoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"_embedded" : {
"dataplugin" : {
"id" : "55b21332-a082-4d7c-8f7f-b9f2032a0741",
"pluginType" : "EXTRACTOR",
"name" : "tap-google-analytics",
"namespace" : "tap_google_analytics",
"variant" : "meltanolabs",
"label" : "Google Analytics",
"description" : "Meltano Tap Google Analytics is a Singer tap for extracting Google Analytics 4 (GA4)\ndata into Meltano Cloud for reporting, modelling, and downstream analysis.\n\nIt helps you collect website and app performance data from Google Analytics in a\nrepeatable pipeline so you can analyse traffic, engagement, locations, devices,\npages, and revenue-related activity alongside data from your other business systems.\n\nUse this connector when you want to:\n\n- centralise Google Analytics data in your warehouse\n- build dashboards and reports on website performance\n- track traffic sources, user behaviour, and engagement trends over time\n- combine analytics data with advertising, CRM, sales, or product data\n- customise the extracted reports using your own stream definitions\n\n## Setup\n\nIn [Google Analytics](https://analytics.google.com/):\n1. Select the property you want to extract data for\n1. Go to \"Admin\" -> \"Property\" -> \"Property details\"\n1. Copy the \"PROPERTY ID\"\n\nIn Meltano Cloud:\n1. Login and connect with your Google account\n1. Enter the property ID\n1. Choose a start date for extraction\n\n## Streams\n\nThe tap provides the following default streams:\n\n### `website_overview`\n\nOverview of the website performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `traffic_sources`\n\nWhere website traffic originates from.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`source` | Dimension. The source that sent traffic, such as a website or referrer.\n`medium` | Dimension. The marketing medium for the traffic source, such as organic, referral, or cpc.\n`sourcePlatform` | Dimension. The platform associated with the traffic source.\n`activeUsers` | Metric. The number of active users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `locations`\n\nWebsite activity by country, region, and city.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`country` | Dimension. The country where the activity originated.\n`countryId` | Dimension. The Google Analytics identifier for the country.\n`region` | Dimension. The region or state where the activity originated.\n`city` | Dimension. The city where the activity originated.\n`cityId` | Dimension. The Google Analytics identifier for the city.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `four_weekly_active_users`\n\nActive users measured over a rolling 28 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active28DayUsers` | Metric. The number of active users over the last 28 days.\n\n### `weekly_active_users`\n\nActive users measured over a rolling 7 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active7DayUsers` | Metric. The number of active users over the last 7 days.\n\n### `daily_active_users`\n\nActive users measured over a rolling 1 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active1DayUsers` | Metric. The number of active users over the last 1 day.\n\n### `devices`\n\nWebsite activity by device, operating system, and browser.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`deviceCategory` | Dimension. The type of device used, such as desktop, tablet, or mobile.\n`deviceModel` | Dimension. The model of device used by the visitor.\n`operatingSystem` | Dimension. The operating system used by the visitor.\n`browser` | Dimension. The browser used by the visitor.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `transactions`\n\nRevenue and transaction performance overview.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`averageRevenuePerUser` | Metric. The average revenue generated per user.\n`newUsers` | Metric. The number of first-time users.\n`purchaseRevenue` | Metric. The revenue generated from purchases.\n`sessions` | Metric. The number of sessions recorded.\n`totalRevenue` | Metric. The total revenue attributed in the report.\n`transactions` | Metric. The number of completed transactions.\n\n### `pages`\n\nPage-level traffic and engagement performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`hostName` | Dimension. The hostname where the page was viewed.\n`pagePath` | Dimension. The path portion of the viewed page URL.\n`sessionMedium` | Dimension. The session-level marketing medium.\n`sessionSource` | Dimension. The session-level traffic source.\n`activeUsers` | Metric. The number of active users.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagedSessions` | Metric. The number of engaged sessions.\n`engagementRate` | Metric. The percentage of engaged sessions.\n`eventCount` | Metric. The total number of tracked events.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerUser` | Metric. The average number of page or screen views per user.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`userEngagementDuration` | Metric. The amount of time users were actively engaged.\n\n## Custom Streams\n\nThe tap also supports custom streams. When custom stream definitions are specified,\nthey override all default streams.",
"logoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"hidden" : false,
"pipUrl" : "git+https://github.com/MeltanoLabs/tap-google-analytics.git@v0.1.1",
"repo" : "https://github.com/MeltanoLabs/tap-google-analytics",
"capabilities" : [ "ABOUT", "STREAM_MAPS", "SCHEMA_FLATTENING", "CATALOG", "DISCOVER", "STATE" ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "oauth_credentials.authorization_url",
"aliases" : [ ],
"value" : "https://accounts.google.com/o/oauth2/v2/auth",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.scope",
"aliases" : [ ],
"value" : "https://www.googleapis.com/auth/analytics.readonly",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "oauth_credentials.access_token",
"aliases" : [ ],
"label" : "OAuth Credentials Access Token",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Access Token",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_token",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Token",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Token",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_proxy_url",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Proxy URL",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Proxy URL. If your refresh token needs to be refreshed through a proxy, you can provide the URL here.",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_proxy_url_auth",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Proxy URL Auth",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Proxy URL Auth. If your refresh token needs to be refreshed through a proxy, you can provide the URL here.",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "property_id",
"aliases" : [ ],
"label" : "Property ID",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Property ID.\n\nTo find this in Google Analytics:\n\n1. Log in to the Analytics dashboard\n1. Select the property\n1. Go to \"Admin\"\n1. Under \"Property\", open \"Property details\"\n1. Copy the \"Property ID\"",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "start_date",
"aliases" : [ ],
"label" : "Start Date",
"options" : [ ],
"kind" : "DATE_ISO8601",
"description" : "The earliest record date to sync",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "reports",
"aliases" : [ ],
"label" : "Report definitions file",
"options" : [ ],
"placeholder" : "Ex. my_report_definition.json",
"kind" : "STRING",
"description" : "Google Analytics Reports Definition.\nThe tap uses the [default reports definition](https://github.com/MeltanoLabs/tap-google-analytics/blob/main/tap_google_analytics/defaults/default_report_definition.json)\nif this field is not provided.\nA project-relative path to JSON file with the definition of the reports to be generated.\n\nSee <https://ga-dev-tools.google/ga4/dimensions-metrics-explorer/> for valid dimensions and metrics.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n { \"name\" : \"name of stream to be used\",\n \"dimensions\" :\n [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\",\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\" :\n [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\",\n // ... up to 10 metrics per stream ...\n ]\n },\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, if you want to extract user stats per day in a `users_per_day` stream and session stats per day and country in a `sessions_per_country_day` stream:\n\n```json\n[\n { \"name\" : \"users_per_day\",\n \"dimensions\" :\n [\n \"date\"\n ],\n \"metrics\" :\n [\n \"newUsers\",\n \"active1DayUsers\"\n ]\n },\n { \"name\" : \"sessions_per_country_day\",\n \"dimensions\" :\n [\n \"date\",\n \"country\"\n ],\n \"metrics\" :\n [\n \"sessions\",\n \"sessionsPerUser\",\n \"avgSessionDuration\"\n ]\n }\n]\n```\n",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "reports_list",
"aliases" : [ ],
"label" : "Report definitions list",
"options" : [ ],
"kind" : "ARRAY",
"description" : "A list of report definitions to be generated directly in the config.\nEach object in the list defines a report/stream to extract, including the stream name,\nthe Google Analytics dimensions, and the metrics to request.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n {\n \"name\": \"name of stream to be used\",\n \"dimensions\": [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\"\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\": [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\"\n // ... up to 10 metrics per stream ...\n ]\n }\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, you can define multiple reports inline like this:\n\n```json\n[\n {\n \"name\": \"traffic_overview\",\n \"dimensions\": [\"date\", \"country\"],\n \"metrics\": [\"activeUsers\", \"sessions\"]\n },\n {\n \"name\": \"device_analysis\",\n \"dimensions\": [\"date\", \"deviceCategory\"],\n \"metrics\": [\"activeUsers\", \"engagedSessions\", \"engagementRate\"]\n },\n {\n \"name\": \"traffic_source_analysis\",\n \"dimensions\": [\"date\", \"sessionSource\", \"sessionMedium\"],\n \"metrics\": [\"activeUsers\", \"sessions\", \"eventCount\"]\n },\n {\n \"name\": \"top_pages\",\n \"dimensions\": [\"date\", \"pagePath\"],\n \"metrics\": [\"screenPageViews\", \"activeUsers\"]\n },\n {\n \"name\": \"engagement_report\",\n \"dimensions\": [\"date\"],\n \"metrics\": [\"engagedSessions\", \"engagementRate\", \"userEngagementDuration\"]\n }\n]\n```\n",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "end_date",
"aliases" : [ ],
"label" : "End Date",
"options" : [ ],
"kind" : "DATE_ISO8601",
"description" : "The last record date to sync",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flattening_enabled",
"aliases" : [ ],
"label" : "Flattening Enabled",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "'True' to enable schema flattening and automatically expand nested properties.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flattening_max_depth",
"aliases" : [ ],
"label" : "Flattening Max Depth",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The max depth to flatten schemas.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "stream_map_config",
"aliases" : [ ],
"label" : "Stream Map Config",
"options" : [ ],
"kind" : "OBJECT",
"description" : "User-defined config values to be used within map expressions.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "stream_maps",
"aliases" : [ ],
"label" : "Stream Maps",
"options" : [ ],
"kind" : "OBJECT",
"description" : "Config object for stream maps capability. For more information check out [Stream Maps](https://sdk.meltano.com/en/latest/stream_maps.html).",
"hidden" : false,
"sensitive" : false,
"protected" : false
} ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : "Meltano Tap Google Analytics is a Singer tap for extracting Google Analytics 4 (GA4)\ndata into Meltano Cloud for reporting, modelling, and downstream analysis.\n\nIt helps you collect website and app performance data from Google Analytics in a\nrepeatable pipeline so you can analyse traffic, engagement, locations, devices,\npages, and revenue-related activity alongside data from your other business systems.\n\nUse this connector when you want to:\n\n- centralise Google Analytics data in your warehouse\n- build dashboards and reports on website performance\n- track traffic sources, user behaviour, and engagement trends over time\n- combine analytics data with advertising, CRM, sales, or product data\n- customise the extracted reports using your own stream definitions\n\n## Setup\n\nIn [Google Analytics](https://analytics.google.com/):\n1. Select the property you want to extract data for\n1. Go to \"Admin\" -> \"Property\" -> \"Property details\"\n1. Copy the \"PROPERTY ID\"\n\nIn Meltano Cloud:\n1. Login and connect with your Google account\n1. Enter the property ID\n1. Choose a start date for extraction\n\n## Streams\n\nThe tap provides the following default streams:\n\n### `website_overview`\n\nOverview of the website performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `traffic_sources`\n\nWhere website traffic originates from.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`source` | Dimension. The source that sent traffic, such as a website or referrer.\n`medium` | Dimension. The marketing medium for the traffic source, such as organic, referral, or cpc.\n`sourcePlatform` | Dimension. The platform associated with the traffic source.\n`activeUsers` | Metric. The number of active users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `locations`\n\nWebsite activity by country, region, and city.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`country` | Dimension. The country where the activity originated.\n`countryId` | Dimension. The Google Analytics identifier for the country.\n`region` | Dimension. The region or state where the activity originated.\n`city` | Dimension. The city where the activity originated.\n`cityId` | Dimension. The Google Analytics identifier for the city.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `four_weekly_active_users`\n\nActive users measured over a rolling 28 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active28DayUsers` | Metric. The number of active users over the last 28 days.\n\n### `weekly_active_users`\n\nActive users measured over a rolling 7 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active7DayUsers` | Metric. The number of active users over the last 7 days.\n\n### `daily_active_users`\n\nActive users measured over a rolling 1 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active1DayUsers` | Metric. The number of active users over the last 1 day.\n\n### `devices`\n\nWebsite activity by device, operating system, and browser.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`deviceCategory` | Dimension. The type of device used, such as desktop, tablet, or mobile.\n`deviceModel` | Dimension. The model of device used by the visitor.\n`operatingSystem` | Dimension. The operating system used by the visitor.\n`browser` | Dimension. The browser used by the visitor.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `transactions`\n\nRevenue and transaction performance overview.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`averageRevenuePerUser` | Metric. The average revenue generated per user.\n`newUsers` | Metric. The number of first-time users.\n`purchaseRevenue` | Metric. The revenue generated from purchases.\n`sessions` | Metric. The number of sessions recorded.\n`totalRevenue` | Metric. The total revenue attributed in the report.\n`transactions` | Metric. The number of completed transactions.\n\n### `pages`\n\nPage-level traffic and engagement performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`hostName` | Dimension. The hostname where the page was viewed.\n`pagePath` | Dimension. The path portion of the viewed page URL.\n`sessionMedium` | Dimension. The session-level marketing medium.\n`sessionSource` | Dimension. The session-level traffic source.\n`activeUsers` | Metric. The number of active users.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagedSessions` | Metric. The number of engaged sessions.\n`engagementRate` | Metric. The percentage of engaged sessions.\n`eventCount` | Metric. The total number of tracked events.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerUser` | Metric. The average number of page or screen views per user.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`userEngagementDuration` | Metric. The amount of time users were actively engaged.\n\n## Custom Streams\n\nThe tap also supports custom streams. When custom stream definitions are specified,\nthey override all default streams.\n\n## Settings\n\n\n### Property ID\n\nGoogle Analytics Property ID.\n\nTo find this in Google Analytics:\n\n1. Log in to the Analytics dashboard\n1. Select the property\n1. Go to \"Admin\"\n1. Under \"Property\", open \"Property details\"\n1. Copy the \"Property ID\"\n\n### Start Date\n\nThe earliest record date to sync\n\n### Report definitions file\n\nGoogle Analytics Reports Definition.\nThe tap uses the [default reports definition](https://github.com/MeltanoLabs/tap-google-analytics/blob/main/tap_google_analytics/defaults/default_report_definition.json)\nif this field is not provided.\nA project-relative path to JSON file with the definition of the reports to be generated.\n\nSee <https://ga-dev-tools.google/ga4/dimensions-metrics-explorer/> for valid dimensions and metrics.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n { \"name\" : \"name of stream to be used\",\n \"dimensions\" :\n [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\",\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\" :\n [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\",\n // ... up to 10 metrics per stream ...\n ]\n },\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, if you want to extract user stats per day in a `users_per_day` stream and session stats per day and country in a `sessions_per_country_day` stream:\n\n```json\n[\n { \"name\" : \"users_per_day\",\n \"dimensions\" :\n [\n \"date\"\n ],\n \"metrics\" :\n [\n \"newUsers\",\n \"active1DayUsers\"\n ]\n },\n { \"name\" : \"sessions_per_country_day\",\n \"dimensions\" :\n [\n \"date\",\n \"country\"\n ],\n \"metrics\" :\n [\n \"sessions\",\n \"sessionsPerUser\",\n \"avgSessionDuration\"\n ]\n }\n]\n```\n\n\n### Report definitions list\n\nA list of report definitions to be generated directly in the config.\nEach object in the list defines a report/stream to extract, including the stream name,\nthe Google Analytics dimensions, and the metrics to request.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n {\n \"name\": \"name of stream to be used\",\n \"dimensions\": [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\"\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\": [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\"\n // ... up to 10 metrics per stream ...\n ]\n }\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, you can define multiple reports inline like this:\n\n```json\n[\n {\n \"name\": \"traffic_overview\",\n \"dimensions\": [\"date\", \"country\"],\n \"metrics\": [\"activeUsers\", \"sessions\"]\n },\n {\n \"name\": \"device_analysis\",\n \"dimensions\": [\"date\", \"deviceCategory\"],\n \"metrics\": [\"activeUsers\", \"engagedSessions\", \"engagementRate\"]\n },\n {\n \"name\": \"traffic_source_analysis\",\n \"dimensions\": [\"date\", \"sessionSource\", \"sessionMedium\"],\n \"metrics\": [\"activeUsers\", \"sessions\", \"eventCount\"]\n },\n {\n \"name\": \"top_pages\",\n \"dimensions\": [\"date\", \"pagePath\"],\n \"metrics\": [\"screenPageViews\", \"activeUsers\"]\n },\n {\n \"name\": \"engagement_report\",\n \"dimensions\": [\"date\"],\n \"metrics\": [\"engagedSessions\", \"engagementRate\", \"userEngagementDuration\"]\n }\n]\n```\n\n\n### End Date\n\nThe last record date to sync\n\n### Flattening Enabled\n\n'True' to enable schema flattening and automatically expand nested properties.\n\n### Flattening Max Depth\n\nThe max depth to flatten schemas.\n\n### Stream Map Config\n\nUser-defined config values to be used within map expressions.\n\n### Stream Maps\n\nConfig object for stream maps capability. For more information check out [Stream Maps](https://sdk.meltano.com/en/latest/stream_maps.html).",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741",
"type" : "DELETE"
}
}
}
},
"draft" : true,
"managed" : false,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
}
}
}, {
"id" : "ef91b260-3416-4405-8fe7-c1887f7992ea",
"created" : "2026-04-23T13:09:41.664014",
"lastModified" : "2026-04-23T13:09:41.664014",
"name" : "Warehouse",
"properties" : {
"password" : "0K89mftB_BXs2mr0s_t918yYTe",
"default_target_schema" : "analytics",
"dbname" : "rhklhef",
"port" : "5432",
"host" : "sharp-banana2.postgres.database.azure.com",
"user" : "rhklhef"
},
"commands" : { },
"dataPlugin" : "loaders/target-postgres--matatika",
"dataPluginType" : "loader",
"dataPluginLogoUrl" : "/assets/logos/loaders/postgres.png",
"_embedded" : {
"dataplugin" : {
"id" : "215e1d33-1e0e-4600-8e14-20148fab4269",
"pluginType" : "LOADER",
"name" : "target-postgres",
"namespace" : "postgres_transferwise",
"variant" : "matatika",
"label" : "Postgres Warehouse",
"description" : "Postgres Warehouse is a data warehousing solution built on top of the Postgres database management system.\n\nPostgres Warehouse is designed to handle large volumes of data and complex queries, making it an ideal solution for businesses that need to store and analyze large amounts of data. It provides a number of features that are specifically tailored to data warehousing, such as columnar storage, parallel processing, and support for advanced analytics. Additionally, Postgres Warehouse is highly scalable, allowing businesses to easily add more resources as their data needs grow. Overall, Postgres Warehouse is a powerful and flexible data warehousing solution that can help businesses make better decisions by providing them with the insights they need to succeed.\n### Prerequisites\nThe process of obtaining the required settings for connecting to a Postgres Warehouse may vary depending on the specific setup and configuration of the database. However, here are some general ways to obtain each of the required settings:\n\n- User: The user is typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the username.\n- Password: The password is also typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the password.\n- Host: The host is the server where the database is located. You can ask the database administrator or check the database documentation to find out the host name or IP address.\n- Port: The port is the number that the database listens on for incoming connections. The default port for Postgres is 5432, but it may be different depending on the configuration. You can ask the database administrator or check the database documentation to find out the port number.\n- Database Name: The database name is the name of the specific database you want to connect to. You can ask the database administrator or check the database documentation to find out the database name.\n- Default Target Schema: The default target schema is the schema that you want to use as the default when connecting to the database. This may be set up by the database administrator or you may need to create it yourself. You can ask the database administrator or check the database documentation to find out the default target schema.",
"logoUrl" : "/assets/logos/loaders/postgres.png",
"hidden" : false,
"docs" : "https://www.matatika.com/data-details/target-postgres/",
"pipUrl" : "git+https://github.com/Matatika/pipelinewise-target-postgres.git@v0.2.1",
"repo" : "https://github.com/Matatika/pipelinewise-target-postgres",
"capabilities" : [ ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "user",
"aliases" : [ "username" ],
"label" : "User",
"options" : [ ],
"kind" : "STRING",
"description" : "The username used to connect to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "password",
"aliases" : [ ],
"label" : "Password",
"options" : [ ],
"kind" : "STRING",
"description" : "The password used to authenticate the user.",
"hidden" : false,
"sensitive" : true,
"required" : "true",
"protected" : false
}, {
"name" : "host",
"aliases" : [ "address" ],
"label" : "Host",
"options" : [ ],
"kind" : "STRING",
"description" : "The hostname or IP address of the Postgres Warehouse server.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "port",
"aliases" : [ ],
"label" : "Port",
"value" : "5432",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The port number used to connect to the Postgres Warehouse server.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "dbname",
"aliases" : [ "database" ],
"label" : "Database Name",
"options" : [ ],
"kind" : "STRING",
"description" : "The name of the database to connect to.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "default_target_schema",
"aliases" : [ ],
"label" : "Default Target Schema",
"value" : "analytics",
"options" : [ ],
"kind" : "STRING",
"description" : "The default schema to use when writing data to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "state_schema",
"aliases" : [ ],
"label" : "State Schema",
"value" : "public",
"options" : [ ],
"kind" : "STRING",
"description" : "The default schema to use when writing Meltano state.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "ssl",
"aliases" : [ ],
"label" : "SSL",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to use SSL encryption when connecting to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false,
"value_post_processor" : "STRINGIFY"
}, {
"name" : "batch_size_rows",
"aliases" : [ ],
"label" : "Batch Size Rows",
"value" : "100000",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The number of rows to write to the Postgres Warehouse in each batch.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "underscore_camel_case_fields",
"aliases" : [ ],
"label" : "Underscore Camel Case Fields",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to convert field names from camel case to underscore-separated format.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flush_all_streams",
"aliases" : [ ],
"label" : "Flush All Streams",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to flush all streams to the Postgres Warehouse before closing the connection.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "parallelism",
"aliases" : [ ],
"label" : "Parallelism",
"value" : "-1",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The number of threads to use when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "parallelism_max",
"aliases" : [ ],
"label" : "Max Parallelism",
"value" : "16",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The maximum number of threads to use when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "default_target_schema_select_permission",
"aliases" : [ ],
"label" : "Default Target Schema Select Permission",
"options" : [ ],
"kind" : "STRING",
"description" : "The permission level required to select data from the default target schema.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "schema_mapping",
"aliases" : [ ],
"label" : "Schema Mapping",
"options" : [ ],
"kind" : "STRING",
"description" : "A mapping of source schema names to target schema names.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "add_metadata_columns",
"aliases" : [ ],
"label" : "Add Metadata Columns",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to add metadata columns to the target table.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "hard_delete",
"aliases" : [ ],
"label" : "Hard Delete",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to perform hard deletes when deleting data from the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "data_flattening_max_level",
"aliases" : [ ],
"label" : "Data Flattening Max Level",
"value" : "10",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The maximum level of nested data structures to flatten when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "primary_key_required",
"aliases" : [ ],
"label" : "Primary Key Required",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not a primary key is required for the target table.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "validate_records",
"aliases" : [ ],
"label" : "Validate Records",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to validate records before writing them to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "temp_dir",
"aliases" : [ ],
"label" : "Temporary Directory",
"options" : [ ],
"kind" : "STRING",
"description" : "The directory to use for temporary files when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.host",
"aliases" : [ ],
"label" : "SSH Tunnel Host",
"options" : [ ],
"kind" : "STRING",
"description" : "Host of the bastion host, this is the host we'll connect to via ssh",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.port",
"aliases" : [ ],
"label" : "SSH Tunnel Port",
"value" : "22",
"options" : [ ],
"kind" : "INTEGER",
"description" : "Port to connect to bastion host",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.private_key",
"aliases" : [ ],
"label" : "SSH Tunnel Private Key",
"options" : [ ],
"kind" : "PASSWORD",
"description" : "A base64 encoded Private Key for authentication to the bastion host w/ key pair auth",
"hidden" : false,
"sensitive" : true,
"encoding" : "BASE64",
"protected" : false
}, {
"name" : "ssh_tunnel.private_key_password",
"aliases" : [ ],
"label" : "SSH Tunnel Private Key Password",
"options" : [ ],
"kind" : "PASSWORD",
"description" : "Private Key Password, leave None if no password is set",
"hidden" : false,
"sensitive" : true,
"protected" : false
}, {
"name" : "ssh_tunnel.username",
"aliases" : [ ],
"label" : "SSH Tunnel Username",
"options" : [ ],
"kind" : "STRING",
"description" : "Username to connect to bastion host",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.password",
"aliases" : [ ],
"label" : "SSH Tunnel Password",
"options" : [ ],
"kind" : "STRING",
"description" : "Password to connect to bastion host w/ basic auth",
"hidden" : false,
"sensitive" : true,
"protected" : false
}, {
"name" : "ssh_tunnel.host_setting_name",
"aliases" : [ ],
"value" : "host",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.port_setting_name",
"aliases" : [ ],
"value" : "port",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
} ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : "Postgres Warehouse is a data warehousing solution built on top of the Postgres database management system.\n\nPostgres Warehouse is designed to handle large volumes of data and complex queries, making it an ideal solution for businesses that need to store and analyze large amounts of data. It provides a number of features that are specifically tailored to data warehousing, such as columnar storage, parallel processing, and support for advanced analytics. Additionally, Postgres Warehouse is highly scalable, allowing businesses to easily add more resources as their data needs grow. Overall, Postgres Warehouse is a powerful and flexible data warehousing solution that can help businesses make better decisions by providing them with the insights they need to succeed.\n### Prerequisites\nThe process of obtaining the required settings for connecting to a Postgres Warehouse may vary depending on the specific setup and configuration of the database. However, here are some general ways to obtain each of the required settings:\n\n- User: The user is typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the username.\n- Password: The password is also typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the password.\n- Host: The host is the server where the database is located. You can ask the database administrator or check the database documentation to find out the host name or IP address.\n- Port: The port is the number that the database listens on for incoming connections. The default port for Postgres is 5432, but it may be different depending on the configuration. You can ask the database administrator or check the database documentation to find out the port number.\n- Database Name: The database name is the name of the specific database you want to connect to. You can ask the database administrator or check the database documentation to find out the database name.\n- Default Target Schema: The default target schema is the schema that you want to use as the default when connecting to the database. This may be set up by the database administrator or you may need to create it yourself. You can ask the database administrator or check the database documentation to find out the default target schema.\n\n## Settings\n\n\n### User\n\nThe username used to connect to the Postgres Warehouse.\n\n### Password\n\nThe password used to authenticate the user.\n\n### Host\n\nThe hostname or IP address of the Postgres Warehouse server.\n\n### Port\n\nThe port number used to connect to the Postgres Warehouse server.\n\n### Database Name\n\nThe name of the database to connect to.\n\n### Default Target Schema\n\nThe default schema to use when writing data to the Postgres Warehouse.\n\n### State Schema\n\nThe default schema to use when writing Meltano state.\n\n### Batch Size Rows\n\nThe number of rows to write to the Postgres Warehouse in each batch.\n\n### Underscore Camel Case Fields\n\nWhether or not to convert field names from camel case to underscore-separated format.\n\n### Primary Key Required\n\nWhether or not a primary key is required for the target table.\n\n### Validate Records\n\nWhether or not to validate records before writing them to the Postgres Warehouse.\n\n### SSH Tunnel Host\n\nHost of the bastion host, this is the host we'll connect to via ssh\n\n### SSH Tunnel Port\n\nPort to connect to bastion host\n\n### SSH Tunnel Private Key\n\nA base64 encoded Private Key for authentication to the bastion host w/ key pair auth\n\n### SSH Tunnel Private Key Password\n\nPrivate Key Password, leave None if no password is set\n\n### SSH Tunnel Username\n\nUsername to connect to bastion host\n\n### SSH Tunnel Password\n\nPassword to connect to bastion host w/ basic auth",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269",
"type" : "DELETE"
}
}
}
},
"draft" : false,
"managed" : true,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
}
}
}, {
"id" : "b4f232d4-29c3-4646-b4c6-f54850843c44",
"created" : "2026-04-23T13:09:41.746029",
"lastModified" : "2026-04-23T13:09:41.74603",
"name" : "dbt",
"properties" : { },
"commands" : {
"compile" : {
"args" : "compile",
"description" : "Generates executable SQL from source model, test, and analysis files. Compiled SQL files are written to the target/ directory."
},
"seed" : {
"args" : "seed",
"description" : "Load data from csv files into your data warehouse."
},
"test" : {
"args" : "test",
"description" : "Runs tests on data in deployed models."
},
"docs-generate" : {
"args" : "docs generate",
"description" : "Generate documentation artifacts for your project."
},
"deps" : {
"args" : "deps",
"description" : "Pull the most recent version of the dependencies listed in packages.yml"
},
"run" : {
"args" : "run",
"description" : "Compile SQL and execute against the current target database."
},
"clean" : {
"args" : "clean",
"description" : "Delete all folders in the clean-targets list (usually the dbt_modules and target directories.)"
},
"snapshot" : {
"args" : "snapshot",
"description" : "Execute snapshots defined in your project."
}
},
"dataPlugin" : "transformers/dbt--dbt-labs",
"dataPluginType" : "transformer",
"dataPluginLogoUrl" : "/assets/images/transformer/dbt.png",
"_embedded" : {
"dataplugin" : {
"id" : "0a83351b-4992-4cbe-aa0e-954115e7002d",
"pluginType" : "TRANSFORMER",
"name" : "dbt",
"namespace" : "dbt",
"variant" : "dbt-labs",
"label" : "dbt",
"description" : " Power your project transformations with dbt™, a SQL-first transformation tool that enables analytics engineers to develop transformations with code.\n\n***Version Control and CI/CD***\n\nUse Matatika to deploy and promote changes between dev, UAT, and production environments.\n\n***Test and Document***\n\nUse Matatika to develop and test every model prior to production release, and share dynamically generated documentation with all stakeholders.\n\n***Develop***\n\nWrite modular data transformations in .sql – Matatika together with dbt handles the chore of dependency management. ",
"logoUrl" : "/assets/images/transformer/dbt.png",
"hidden" : false,
"docs" : "https://www.matatika.com/data-details/dbt/",
"pipUrl" : "dbt-core~=1.7.0 dbt-postgres~=1.7.0 dbt-snowflake~=1.7.0 dbt-bigquery~=1.7.0 certifi==2025.1.31",
"repo" : "https://github.com/dbt-labs/dbt-core",
"capabilities" : [ ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "project_dir",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/transform",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "profiles_dir",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/transform/profile",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"env" : "DBT_PROFILES_DIR",
"protected" : false
}, {
"name" : "target",
"aliases" : [ ],
"value" : "$MELTANO_LOAD__DIALECT",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "source_schema",
"aliases" : [ ],
"value" : "$MELTANO_LOAD__TARGET_SCHEMA",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "target_schema",
"aliases" : [ ],
"value" : "analytics",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "target_path",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/.meltano/transformers/dbt/target",
"options" : [ ],
"kind" : "STRING",
"description" : "Output path for dbt generated artifacts",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "models",
"aliases" : [ ],
"value" : "$MELTANO_TRANSFORM__PACKAGE_NAME $MELTANO_EXTRACTOR_NAMESPACE my_meltano_project",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "secret_git_credential",
"aliases" : [ ],
"options" : [ ],
"kind" : "STRING",
"description" : "A convenient and simple way to supply a git credential for packages resolve by dbt:deps",
"hidden" : false,
"sensitive" : true,
"env" : "DBT_ENV_SECRET_GIT_CREDENTIAL",
"protected" : false
} ],
"variants" : [ ],
"commands" : {
"compile" : {
"args" : "compile",
"description" : "Generates executable SQL from source model, test, and analysis files. Compiled SQL files are written to the target/ directory."
},
"seed" : {
"args" : "seed",
"description" : "Load data from csv files into your data warehouse."
},
"test" : {
"args" : "test",
"description" : "Runs tests on data in deployed models."
},
"docs-generate" : {
"args" : "docs generate",
"description" : "Generate documentation artifacts for your project."
},
"deps" : {
"args" : "deps",
"description" : "Pull the most recent version of the dependencies listed in packages.yml"
},
"run" : {
"args" : "run",
"description" : "Compile SQL and execute against the current target database."
},
"clean" : {
"args" : "clean",
"description" : "Delete all folders in the clean-targets list (usually the dbt_modules and target directories.)"
},
"snapshot" : {
"args" : "snapshot",
"description" : "Execute snapshots defined in your project."
}
},
"matatikaHidden" : false,
"requires" : [ {
"id" : "e6c1ad3d-ebf5-4c4a-b129-f68156b47555",
"pluginType" : "FILE",
"name" : "files-dbt",
"namespace" : "dbt",
"variant" : "matatika",
"description" : " Files dbt is a file bundle that automatically configures your project to run transforms with dbt.\nThe bundle includes template project configuration:\n\n- transform/models (directory)\n- transform/profile/profiles.yml\n- transform/dbt_project.yml\n- transform/.gitignore\n- transform/macros/centralize_test_failures.sql\n",
"hidden" : false,
"pipUrl" : "git+https://github.com/Matatika/files-dbt@v1.3",
"repo" : "https://github.com/Matatika/files-dbt",
"capabilities" : [ ],
"select" : [ ],
"update" : {
"transform/profile/profiles.yml" : "true"
},
"vars" : { },
"settings" : [ ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : " Files dbt is a file bundle that automatically configures your project to run transforms with dbt.\nThe bundle includes template project configuration:\n\n- transform/models (directory)\n- transform/profile/profiles.yml\n- transform/dbt_project.yml\n- transform/.gitignore\n- transform/macros/centralize_test_failures.sql\n"
} ],
"fullDescription" : " Power your project transformations with dbt™, a SQL-first transformation tool that enables analytics engineers to develop transformations with code.\n\n***Version Control and CI/CD***\n\nUse Matatika to deploy and promote changes between dev, UAT, and production environments.\n\n***Test and Document***\n\nUse Matatika to develop and test every model prior to production release, and share dynamically generated documentation with all stakeholders.\n\n***Develop***\n\nWrite modular data transformations in .sql – Matatika together with dbt handles the chore of dependency management. \n\n## Settings\n\n\n### target_path\n\nOutput path for dbt generated artifacts\n\n### secret_git_credential\n\nA convenient and simple way to supply a git credential for packages resolve by dbt:deps",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d",
"type" : "DELETE"
}
}
}
},
"draft" : false,
"managed" : true,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
}
}
} ]
},
"_links" : {
"update pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"type" : "PUT"
},
"delete pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"type" : "DELETE"
},
"draft pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/draft",
"type" : "PUT"
},
"self" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5"
},
"environment" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/environment"
},
"jobs" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/jobs",
"type" : "GET"
},
"metrics" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/metrics"
},
"add subscription" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/subscriptions"
},
"verify pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/verification",
"type" : "POST"
},
"create job" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/jobs",
"type" : "POST"
}
}
}
Properties
For each setting in the datacomponents' dataplugin settings for each
| Path | JSON Type | Format | Description |
|---|---|---|---|
{datacomponent_name}.{setting_name} | Refer to setting kind | Refer to setting kind | Refer to setting description |
- Any required settings not satisfied by a datacomponent property must be provided as a pipeline property
- Any settings that are already satisfied by a datacomponent property can be overridden by a pipeline property
See create or update a pipeline in a workspace request for a working example.
Reserved Properties for Extractor Datacomponents
| Path | JSON Type | Format | Description |
|---|---|---|---|
{datacomponent_name}._select | string | JSON array | Meltano stream and property selection rules |
{datacomponent_name}._metadata | string | JSON object | Meltano stream and property metadata rules |
{
"name" : "github",
"dataComponents" : [ "tap-github", "Warehouse" ],
"properties" : {
"tap-github.repositories" : "[\"Matatika/matatika-ce\"]",
"tap-github.auth_token" : "***",
"tap-github._select" : "[\"commits.sha\"]",
"tap-github._metadata" : "{\"commits\":{\"replication-method\":\"FULL_TABLE\",\"replication-key\":\"commit_timestamp\"}}"
}
}
Formats
Pipeline Status
| Value | Description |
|---|---|
READY | The pipeline completed processing resource changes |
PROVISIONING | The pipeline is processing resource changes |
FAILED | The pipeline failed to process resource changes |
Requests
View all pipelines in a workspace
GET /api/workspaces/{workspace-id}/pipelines
Returns all configured pipelines in the workspace {workspace-id}.
Prerequisites
- Workspace
{workspace-id}must exist
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines' -i -X GET
import requests
url = "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines"
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("GET", url, headers=headers)
print(response.text.encode('utf8'))
Response
200 OK
Pipeline collection with HAL links.
{
"_embedded" : {
"pipelines" : [ {
"id" : "c2791eb3-7ea2-408f-b1a7-3fc3f3045006",
"status" : "DRAFT",
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.043082601]",
"name" : "sit-generated-pipeline-[2026-04-23t13:09:47.043082601]",
"schedule" : "0 0 0 25 12 ?",
"timeout" : 0,
"maxRetries" : 0,
"created" : "2026-04-23T13:09:47.24719",
"lastModified" : "2026-04-23T13:09:48.461054",
"properties" : { },
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ],
"actions" : [ ],
"triggeredBy" : [ ],
"_embedded" : {
"dataComponents" : [ {
"id" : "e8c1225b-48e6-46f8-ad51-559ffba0b046",
"name" : "tap-google-analytics",
"properties" : { },
"commands" : { },
"dataPlugin" : "extractors/tap-google-analytics--meltanolabs",
"dataPluginType" : "extractor",
"dataPluginLogoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"draft" : false,
"managed" : false
}, {
"id" : "ef91b260-3416-4405-8fe7-c1887f7992ea",
"name" : "Warehouse",
"properties" : { },
"commands" : { },
"dataPlugin" : "loaders/target-postgres--matatika",
"dataPluginType" : "loader",
"dataPluginLogoUrl" : "/assets/logos/loaders/postgres.png",
"draft" : false,
"managed" : false
}, {
"id" : "b4f232d4-29c3-4646-b4c6-f54850843c44",
"name" : "dbt",
"properties" : { },
"commands" : { },
"dataPlugin" : "transformers/dbt--dbt-labs",
"dataPluginType" : "transformer",
"dataPluginLogoUrl" : "/assets/images/transformer/dbt.png",
"draft" : false,
"managed" : false
} ]
},
"_links" : {
"update pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006",
"type" : "PUT"
},
"delete pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006",
"type" : "DELETE"
},
"draft pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/draft",
"type" : "PUT"
},
"self" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006"
},
"environment" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/environment"
},
"jobs" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/jobs",
"type" : "GET"
},
"metrics" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/metrics"
},
"add subscription" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/subscriptions"
},
"verify pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/verification",
"type" : "POST"
}
}
}, {
"id" : "b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"status" : "READY",
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599] (updated)",
"name" : "sit-generated-pipeline-[2026-04-23t13:09:47.495074599]",
"timeout" : 0,
"maxRetries" : 0,
"created" : "2026-04-23T13:09:47.622971",
"lastModified" : "2026-04-23T13:09:48.071483",
"properties" : { },
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ],
"actions" : [ ],
"triggeredBy" : [ ],
"_embedded" : {
"dataComponents" : [ {
"id" : "e8c1225b-48e6-46f8-ad51-559ffba0b046",
"name" : "tap-google-analytics",
"properties" : { },
"commands" : { },
"dataPlugin" : "extractors/tap-google-analytics--meltanolabs",
"dataPluginType" : "extractor",
"dataPluginLogoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"draft" : false,
"managed" : false
}, {
"id" : "ef91b260-3416-4405-8fe7-c1887f7992ea",
"name" : "Warehouse",
"properties" : { },
"commands" : { },
"dataPlugin" : "loaders/target-postgres--matatika",
"dataPluginType" : "loader",
"dataPluginLogoUrl" : "/assets/logos/loaders/postgres.png",
"draft" : false,
"managed" : false
}, {
"id" : "b4f232d4-29c3-4646-b4c6-f54850843c44",
"name" : "dbt",
"properties" : { },
"commands" : { },
"dataPlugin" : "transformers/dbt--dbt-labs",
"dataPluginType" : "transformer",
"dataPluginLogoUrl" : "/assets/images/transformer/dbt.png",
"draft" : false,
"managed" : false
} ]
},
"_links" : {
"update pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"type" : "PUT"
},
"delete pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"type" : "DELETE"
},
"draft pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/draft",
"type" : "PUT"
},
"self" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5"
},
"environment" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/environment"
},
"jobs" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/jobs",
"type" : "GET"
},
"metrics" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/metrics"
},
"add subscription" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/subscriptions"
},
"verify pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/verification",
"type" : "POST"
},
"create job" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/jobs",
"type" : "POST"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines?page=0&size=20&sort=label,asc"
}
},
"page" : {
"size" : 20,
"totalElements" : 2,
"totalPages" : 1,
"number" : 0
}
}
View a pipeline
GET /api/pipelines/{pipeline-id}
Returns the pipeline {pipeline-id}.
Prerequisites
- Pipeline
{pipeline-id}must exist
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5' -i -X GET
import requests
url = "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5"
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("GET", url, headers=headers)
print(response.text.encode('utf8'))
Response
200 OK
Pipeline with HAL links.
{
"id" : "b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"status" : "READY",
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599] (updated)",
"name" : "sit-generated-pipeline-[2026-04-23t13:09:47.495074599]",
"timeout" : 0,
"maxRetries" : 0,
"created" : "2026-04-23T13:09:47.622971",
"lastModified" : "2026-04-23T13:09:48.071483",
"properties" : {
"tap-google-analytics.start_date" : "2026-03-23T13:09:47.048027582Z",
"tap-google-analytics.property_id" : "1234567890"
},
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ],
"actions" : [ ],
"triggeredBy" : [ ],
"_embedded" : {
"dataComponents" : [ {
"id" : "e8c1225b-48e6-46f8-ad51-559ffba0b046",
"created" : "2026-04-23T13:09:47.138824",
"lastModified" : "2026-04-23T13:09:47.138826",
"name" : "tap-google-analytics",
"properties" : { },
"commands" : { },
"dataPlugin" : "extractors/tap-google-analytics--meltanolabs",
"dataPluginType" : "extractor",
"dataPluginLogoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"_embedded" : {
"dataplugin" : {
"id" : "55b21332-a082-4d7c-8f7f-b9f2032a0741",
"pluginType" : "EXTRACTOR",
"name" : "tap-google-analytics",
"namespace" : "tap_google_analytics",
"variant" : "meltanolabs",
"label" : "Google Analytics",
"description" : "Meltano Tap Google Analytics is a Singer tap for extracting Google Analytics 4 (GA4)\ndata into Meltano Cloud for reporting, modelling, and downstream analysis.\n\nIt helps you collect website and app performance data from Google Analytics in a\nrepeatable pipeline so you can analyse traffic, engagement, locations, devices,\npages, and revenue-related activity alongside data from your other business systems.\n\nUse this connector when you want to:\n\n- centralise Google Analytics data in your warehouse\n- build dashboards and reports on website performance\n- track traffic sources, user behaviour, and engagement trends over time\n- combine analytics data with advertising, CRM, sales, or product data\n- customise the extracted reports using your own stream definitions\n\n## Setup\n\nIn [Google Analytics](https://analytics.google.com/):\n1. Select the property you want to extract data for\n1. Go to \"Admin\" -> \"Property\" -> \"Property details\"\n1. Copy the \"PROPERTY ID\"\n\nIn Meltano Cloud:\n1. Login and connect with your Google account\n1. Enter the property ID\n1. Choose a start date for extraction\n\n## Streams\n\nThe tap provides the following default streams:\n\n### `website_overview`\n\nOverview of the website performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `traffic_sources`\n\nWhere website traffic originates from.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`source` | Dimension. The source that sent traffic, such as a website or referrer.\n`medium` | Dimension. The marketing medium for the traffic source, such as organic, referral, or cpc.\n`sourcePlatform` | Dimension. The platform associated with the traffic source.\n`activeUsers` | Metric. The number of active users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `locations`\n\nWebsite activity by country, region, and city.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`country` | Dimension. The country where the activity originated.\n`countryId` | Dimension. The Google Analytics identifier for the country.\n`region` | Dimension. The region or state where the activity originated.\n`city` | Dimension. The city where the activity originated.\n`cityId` | Dimension. The Google Analytics identifier for the city.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `four_weekly_active_users`\n\nActive users measured over a rolling 28 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active28DayUsers` | Metric. The number of active users over the last 28 days.\n\n### `weekly_active_users`\n\nActive users measured over a rolling 7 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active7DayUsers` | Metric. The number of active users over the last 7 days.\n\n### `daily_active_users`\n\nActive users measured over a rolling 1 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active1DayUsers` | Metric. The number of active users over the last 1 day.\n\n### `devices`\n\nWebsite activity by device, operating system, and browser.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`deviceCategory` | Dimension. The type of device used, such as desktop, tablet, or mobile.\n`deviceModel` | Dimension. The model of device used by the visitor.\n`operatingSystem` | Dimension. The operating system used by the visitor.\n`browser` | Dimension. The browser used by the visitor.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `transactions`\n\nRevenue and transaction performance overview.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`averageRevenuePerUser` | Metric. The average revenue generated per user.\n`newUsers` | Metric. The number of first-time users.\n`purchaseRevenue` | Metric. The revenue generated from purchases.\n`sessions` | Metric. The number of sessions recorded.\n`totalRevenue` | Metric. The total revenue attributed in the report.\n`transactions` | Metric. The number of completed transactions.\n\n### `pages`\n\nPage-level traffic and engagement performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`hostName` | Dimension. The hostname where the page was viewed.\n`pagePath` | Dimension. The path portion of the viewed page URL.\n`sessionMedium` | Dimension. The session-level marketing medium.\n`sessionSource` | Dimension. The session-level traffic source.\n`activeUsers` | Metric. The number of active users.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagedSessions` | Metric. The number of engaged sessions.\n`engagementRate` | Metric. The percentage of engaged sessions.\n`eventCount` | Metric. The total number of tracked events.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerUser` | Metric. The average number of page or screen views per user.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`userEngagementDuration` | Metric. The amount of time users were actively engaged.\n\n## Custom Streams\n\nThe tap also supports custom streams. When custom stream definitions are specified,\nthey override all default streams.",
"logoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"hidden" : false,
"pipUrl" : "git+https://github.com/MeltanoLabs/tap-google-analytics.git@v0.1.1",
"repo" : "https://github.com/MeltanoLabs/tap-google-analytics",
"capabilities" : [ "ABOUT", "STREAM_MAPS", "SCHEMA_FLATTENING", "CATALOG", "DISCOVER", "STATE" ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "oauth_credentials.authorization_url",
"aliases" : [ ],
"value" : "https://accounts.google.com/o/oauth2/v2/auth",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.scope",
"aliases" : [ ],
"value" : "https://www.googleapis.com/auth/analytics.readonly",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "oauth_credentials.access_token",
"aliases" : [ ],
"label" : "OAuth Credentials Access Token",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Access Token",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_token",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Token",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Token",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_proxy_url",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Proxy URL",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Proxy URL. If your refresh token needs to be refreshed through a proxy, you can provide the URL here.",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_proxy_url_auth",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Proxy URL Auth",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Proxy URL Auth. If your refresh token needs to be refreshed through a proxy, you can provide the URL here.",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "property_id",
"aliases" : [ ],
"label" : "Property ID",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Property ID.\n\nTo find this in Google Analytics:\n\n1. Log in to the Analytics dashboard\n1. Select the property\n1. Go to \"Admin\"\n1. Under \"Property\", open \"Property details\"\n1. Copy the \"Property ID\"",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "start_date",
"aliases" : [ ],
"label" : "Start Date",
"options" : [ ],
"kind" : "DATE_ISO8601",
"description" : "The earliest record date to sync",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "reports",
"aliases" : [ ],
"label" : "Report definitions file",
"options" : [ ],
"placeholder" : "Ex. my_report_definition.json",
"kind" : "STRING",
"description" : "Google Analytics Reports Definition.\nThe tap uses the [default reports definition](https://github.com/MeltanoLabs/tap-google-analytics/blob/main/tap_google_analytics/defaults/default_report_definition.json)\nif this field is not provided.\nA project-relative path to JSON file with the definition of the reports to be generated.\n\nSee <https://ga-dev-tools.google/ga4/dimensions-metrics-explorer/> for valid dimensions and metrics.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n { \"name\" : \"name of stream to be used\",\n \"dimensions\" :\n [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\",\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\" :\n [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\",\n // ... up to 10 metrics per stream ...\n ]\n },\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, if you want to extract user stats per day in a `users_per_day` stream and session stats per day and country in a `sessions_per_country_day` stream:\n\n```json\n[\n { \"name\" : \"users_per_day\",\n \"dimensions\" :\n [\n \"date\"\n ],\n \"metrics\" :\n [\n \"newUsers\",\n \"active1DayUsers\"\n ]\n },\n { \"name\" : \"sessions_per_country_day\",\n \"dimensions\" :\n [\n \"date\",\n \"country\"\n ],\n \"metrics\" :\n [\n \"sessions\",\n \"sessionsPerUser\",\n \"avgSessionDuration\"\n ]\n }\n]\n```\n",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "reports_list",
"aliases" : [ ],
"label" : "Report definitions list",
"options" : [ ],
"kind" : "ARRAY",
"description" : "A list of report definitions to be generated directly in the config.\nEach object in the list defines a report/stream to extract, including the stream name,\nthe Google Analytics dimensions, and the metrics to request.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n {\n \"name\": \"name of stream to be used\",\n \"dimensions\": [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\"\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\": [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\"\n // ... up to 10 metrics per stream ...\n ]\n }\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, you can define multiple reports inline like this:\n\n```json\n[\n {\n \"name\": \"traffic_overview\",\n \"dimensions\": [\"date\", \"country\"],\n \"metrics\": [\"activeUsers\", \"sessions\"]\n },\n {\n \"name\": \"device_analysis\",\n \"dimensions\": [\"date\", \"deviceCategory\"],\n \"metrics\": [\"activeUsers\", \"engagedSessions\", \"engagementRate\"]\n },\n {\n \"name\": \"traffic_source_analysis\",\n \"dimensions\": [\"date\", \"sessionSource\", \"sessionMedium\"],\n \"metrics\": [\"activeUsers\", \"sessions\", \"eventCount\"]\n },\n {\n \"name\": \"top_pages\",\n \"dimensions\": [\"date\", \"pagePath\"],\n \"metrics\": [\"screenPageViews\", \"activeUsers\"]\n },\n {\n \"name\": \"engagement_report\",\n \"dimensions\": [\"date\"],\n \"metrics\": [\"engagedSessions\", \"engagementRate\", \"userEngagementDuration\"]\n }\n]\n```\n",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "end_date",
"aliases" : [ ],
"label" : "End Date",
"options" : [ ],
"kind" : "DATE_ISO8601",
"description" : "The last record date to sync",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flattening_enabled",
"aliases" : [ ],
"label" : "Flattening Enabled",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "'True' to enable schema flattening and automatically expand nested properties.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flattening_max_depth",
"aliases" : [ ],
"label" : "Flattening Max Depth",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The max depth to flatten schemas.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "stream_map_config",
"aliases" : [ ],
"label" : "Stream Map Config",
"options" : [ ],
"kind" : "OBJECT",
"description" : "User-defined config values to be used within map expressions.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "stream_maps",
"aliases" : [ ],
"label" : "Stream Maps",
"options" : [ ],
"kind" : "OBJECT",
"description" : "Config object for stream maps capability. For more information check out [Stream Maps](https://sdk.meltano.com/en/latest/stream_maps.html).",
"hidden" : false,
"sensitive" : false,
"protected" : false
} ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : "Meltano Tap Google Analytics is a Singer tap for extracting Google Analytics 4 (GA4)\ndata into Meltano Cloud for reporting, modelling, and downstream analysis.\n\nIt helps you collect website and app performance data from Google Analytics in a\nrepeatable pipeline so you can analyse traffic, engagement, locations, devices,\npages, and revenue-related activity alongside data from your other business systems.\n\nUse this connector when you want to:\n\n- centralise Google Analytics data in your warehouse\n- build dashboards and reports on website performance\n- track traffic sources, user behaviour, and engagement trends over time\n- combine analytics data with advertising, CRM, sales, or product data\n- customise the extracted reports using your own stream definitions\n\n## Setup\n\nIn [Google Analytics](https://analytics.google.com/):\n1. Select the property you want to extract data for\n1. Go to \"Admin\" -> \"Property\" -> \"Property details\"\n1. Copy the \"PROPERTY ID\"\n\nIn Meltano Cloud:\n1. Login and connect with your Google account\n1. Enter the property ID\n1. Choose a start date for extraction\n\n## Streams\n\nThe tap provides the following default streams:\n\n### `website_overview`\n\nOverview of the website performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `traffic_sources`\n\nWhere website traffic originates from.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`source` | Dimension. The source that sent traffic, such as a website or referrer.\n`medium` | Dimension. The marketing medium for the traffic source, such as organic, referral, or cpc.\n`sourcePlatform` | Dimension. The platform associated with the traffic source.\n`activeUsers` | Metric. The number of active users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `locations`\n\nWebsite activity by country, region, and city.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`country` | Dimension. The country where the activity originated.\n`countryId` | Dimension. The Google Analytics identifier for the country.\n`region` | Dimension. The region or state where the activity originated.\n`city` | Dimension. The city where the activity originated.\n`cityId` | Dimension. The Google Analytics identifier for the city.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `four_weekly_active_users`\n\nActive users measured over a rolling 28 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active28DayUsers` | Metric. The number of active users over the last 28 days.\n\n### `weekly_active_users`\n\nActive users measured over a rolling 7 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active7DayUsers` | Metric. The number of active users over the last 7 days.\n\n### `daily_active_users`\n\nActive users measured over a rolling 1 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active1DayUsers` | Metric. The number of active users over the last 1 day.\n\n### `devices`\n\nWebsite activity by device, operating system, and browser.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`deviceCategory` | Dimension. The type of device used, such as desktop, tablet, or mobile.\n`deviceModel` | Dimension. The model of device used by the visitor.\n`operatingSystem` | Dimension. The operating system used by the visitor.\n`browser` | Dimension. The browser used by the visitor.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `transactions`\n\nRevenue and transaction performance overview.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`averageRevenuePerUser` | Metric. The average revenue generated per user.\n`newUsers` | Metric. The number of first-time users.\n`purchaseRevenue` | Metric. The revenue generated from purchases.\n`sessions` | Metric. The number of sessions recorded.\n`totalRevenue` | Metric. The total revenue attributed in the report.\n`transactions` | Metric. The number of completed transactions.\n\n### `pages`\n\nPage-level traffic and engagement performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`hostName` | Dimension. The hostname where the page was viewed.\n`pagePath` | Dimension. The path portion of the viewed page URL.\n`sessionMedium` | Dimension. The session-level marketing medium.\n`sessionSource` | Dimension. The session-level traffic source.\n`activeUsers` | Metric. The number of active users.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagedSessions` | Metric. The number of engaged sessions.\n`engagementRate` | Metric. The percentage of engaged sessions.\n`eventCount` | Metric. The total number of tracked events.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerUser` | Metric. The average number of page or screen views per user.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`userEngagementDuration` | Metric. The amount of time users were actively engaged.\n\n## Custom Streams\n\nThe tap also supports custom streams. When custom stream definitions are specified,\nthey override all default streams.\n\n## Settings\n\n\n### Property ID\n\nGoogle Analytics Property ID.\n\nTo find this in Google Analytics:\n\n1. Log in to the Analytics dashboard\n1. Select the property\n1. Go to \"Admin\"\n1. Under \"Property\", open \"Property details\"\n1. Copy the \"Property ID\"\n\n### Start Date\n\nThe earliest record date to sync\n\n### Report definitions file\n\nGoogle Analytics Reports Definition.\nThe tap uses the [default reports definition](https://github.com/MeltanoLabs/tap-google-analytics/blob/main/tap_google_analytics/defaults/default_report_definition.json)\nif this field is not provided.\nA project-relative path to JSON file with the definition of the reports to be generated.\n\nSee <https://ga-dev-tools.google/ga4/dimensions-metrics-explorer/> for valid dimensions and metrics.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n { \"name\" : \"name of stream to be used\",\n \"dimensions\" :\n [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\",\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\" :\n [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\",\n // ... up to 10 metrics per stream ...\n ]\n },\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, if you want to extract user stats per day in a `users_per_day` stream and session stats per day and country in a `sessions_per_country_day` stream:\n\n```json\n[\n { \"name\" : \"users_per_day\",\n \"dimensions\" :\n [\n \"date\"\n ],\n \"metrics\" :\n [\n \"newUsers\",\n \"active1DayUsers\"\n ]\n },\n { \"name\" : \"sessions_per_country_day\",\n \"dimensions\" :\n [\n \"date\",\n \"country\"\n ],\n \"metrics\" :\n [\n \"sessions\",\n \"sessionsPerUser\",\n \"avgSessionDuration\"\n ]\n }\n]\n```\n\n\n### Report definitions list\n\nA list of report definitions to be generated directly in the config.\nEach object in the list defines a report/stream to extract, including the stream name,\nthe Google Analytics dimensions, and the metrics to request.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n {\n \"name\": \"name of stream to be used\",\n \"dimensions\": [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\"\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\": [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\"\n // ... up to 10 metrics per stream ...\n ]\n }\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, you can define multiple reports inline like this:\n\n```json\n[\n {\n \"name\": \"traffic_overview\",\n \"dimensions\": [\"date\", \"country\"],\n \"metrics\": [\"activeUsers\", \"sessions\"]\n },\n {\n \"name\": \"device_analysis\",\n \"dimensions\": [\"date\", \"deviceCategory\"],\n \"metrics\": [\"activeUsers\", \"engagedSessions\", \"engagementRate\"]\n },\n {\n \"name\": \"traffic_source_analysis\",\n \"dimensions\": [\"date\", \"sessionSource\", \"sessionMedium\"],\n \"metrics\": [\"activeUsers\", \"sessions\", \"eventCount\"]\n },\n {\n \"name\": \"top_pages\",\n \"dimensions\": [\"date\", \"pagePath\"],\n \"metrics\": [\"screenPageViews\", \"activeUsers\"]\n },\n {\n \"name\": \"engagement_report\",\n \"dimensions\": [\"date\"],\n \"metrics\": [\"engagedSessions\", \"engagementRate\", \"userEngagementDuration\"]\n }\n]\n```\n\n\n### End Date\n\nThe last record date to sync\n\n### Flattening Enabled\n\n'True' to enable schema flattening and automatically expand nested properties.\n\n### Flattening Max Depth\n\nThe max depth to flatten schemas.\n\n### Stream Map Config\n\nUser-defined config values to be used within map expressions.\n\n### Stream Maps\n\nConfig object for stream maps capability. For more information check out [Stream Maps](https://sdk.meltano.com/en/latest/stream_maps.html).",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741",
"type" : "DELETE"
}
}
}
},
"draft" : true,
"managed" : false,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
}
}
}, {
"id" : "ef91b260-3416-4405-8fe7-c1887f7992ea",
"created" : "2026-04-23T13:09:41.664014",
"lastModified" : "2026-04-23T13:09:41.664014",
"name" : "Warehouse",
"properties" : {
"password" : "0K89mftB_BXs2mr0s_t918yYTe",
"default_target_schema" : "analytics",
"dbname" : "rhklhef",
"port" : "5432",
"host" : "sharp-banana2.postgres.database.azure.com",
"user" : "rhklhef"
},
"commands" : { },
"dataPlugin" : "loaders/target-postgres--matatika",
"dataPluginType" : "loader",
"dataPluginLogoUrl" : "/assets/logos/loaders/postgres.png",
"_embedded" : {
"dataplugin" : {
"id" : "215e1d33-1e0e-4600-8e14-20148fab4269",
"pluginType" : "LOADER",
"name" : "target-postgres",
"namespace" : "postgres_transferwise",
"variant" : "matatika",
"label" : "Postgres Warehouse",
"description" : "Postgres Warehouse is a data warehousing solution built on top of the Postgres database management system.\n\nPostgres Warehouse is designed to handle large volumes of data and complex queries, making it an ideal solution for businesses that need to store and analyze large amounts of data. It provides a number of features that are specifically tailored to data warehousing, such as columnar storage, parallel processing, and support for advanced analytics. Additionally, Postgres Warehouse is highly scalable, allowing businesses to easily add more resources as their data needs grow. Overall, Postgres Warehouse is a powerful and flexible data warehousing solution that can help businesses make better decisions by providing them with the insights they need to succeed.\n### Prerequisites\nThe process of obtaining the required settings for connecting to a Postgres Warehouse may vary depending on the specific setup and configuration of the database. However, here are some general ways to obtain each of the required settings:\n\n- User: The user is typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the username.\n- Password: The password is also typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the password.\n- Host: The host is the server where the database is located. You can ask the database administrator or check the database documentation to find out the host name or IP address.\n- Port: The port is the number that the database listens on for incoming connections. The default port for Postgres is 5432, but it may be different depending on the configuration. You can ask the database administrator or check the database documentation to find out the port number.\n- Database Name: The database name is the name of the specific database you want to connect to. You can ask the database administrator or check the database documentation to find out the database name.\n- Default Target Schema: The default target schema is the schema that you want to use as the default when connecting to the database. This may be set up by the database administrator or you may need to create it yourself. You can ask the database administrator or check the database documentation to find out the default target schema.",
"logoUrl" : "/assets/logos/loaders/postgres.png",
"hidden" : false,
"docs" : "https://www.matatika.com/data-details/target-postgres/",
"pipUrl" : "git+https://github.com/Matatika/pipelinewise-target-postgres.git@v0.2.1",
"repo" : "https://github.com/Matatika/pipelinewise-target-postgres",
"capabilities" : [ ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "user",
"aliases" : [ "username" ],
"label" : "User",
"options" : [ ],
"kind" : "STRING",
"description" : "The username used to connect to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "password",
"aliases" : [ ],
"label" : "Password",
"options" : [ ],
"kind" : "STRING",
"description" : "The password used to authenticate the user.",
"hidden" : false,
"sensitive" : true,
"required" : "true",
"protected" : false
}, {
"name" : "host",
"aliases" : [ "address" ],
"label" : "Host",
"options" : [ ],
"kind" : "STRING",
"description" : "The hostname or IP address of the Postgres Warehouse server.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "port",
"aliases" : [ ],
"label" : "Port",
"value" : "5432",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The port number used to connect to the Postgres Warehouse server.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "dbname",
"aliases" : [ "database" ],
"label" : "Database Name",
"options" : [ ],
"kind" : "STRING",
"description" : "The name of the database to connect to.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "default_target_schema",
"aliases" : [ ],
"label" : "Default Target Schema",
"value" : "analytics",
"options" : [ ],
"kind" : "STRING",
"description" : "The default schema to use when writing data to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "state_schema",
"aliases" : [ ],
"label" : "State Schema",
"value" : "public",
"options" : [ ],
"kind" : "STRING",
"description" : "The default schema to use when writing Meltano state.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "ssl",
"aliases" : [ ],
"label" : "SSL",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to use SSL encryption when connecting to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false,
"value_post_processor" : "STRINGIFY"
}, {
"name" : "batch_size_rows",
"aliases" : [ ],
"label" : "Batch Size Rows",
"value" : "100000",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The number of rows to write to the Postgres Warehouse in each batch.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "underscore_camel_case_fields",
"aliases" : [ ],
"label" : "Underscore Camel Case Fields",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to convert field names from camel case to underscore-separated format.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flush_all_streams",
"aliases" : [ ],
"label" : "Flush All Streams",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to flush all streams to the Postgres Warehouse before closing the connection.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "parallelism",
"aliases" : [ ],
"label" : "Parallelism",
"value" : "-1",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The number of threads to use when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "parallelism_max",
"aliases" : [ ],
"label" : "Max Parallelism",
"value" : "16",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The maximum number of threads to use when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "default_target_schema_select_permission",
"aliases" : [ ],
"label" : "Default Target Schema Select Permission",
"options" : [ ],
"kind" : "STRING",
"description" : "The permission level required to select data from the default target schema.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "schema_mapping",
"aliases" : [ ],
"label" : "Schema Mapping",
"options" : [ ],
"kind" : "STRING",
"description" : "A mapping of source schema names to target schema names.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "add_metadata_columns",
"aliases" : [ ],
"label" : "Add Metadata Columns",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to add metadata columns to the target table.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "hard_delete",
"aliases" : [ ],
"label" : "Hard Delete",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to perform hard deletes when deleting data from the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "data_flattening_max_level",
"aliases" : [ ],
"label" : "Data Flattening Max Level",
"value" : "10",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The maximum level of nested data structures to flatten when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "primary_key_required",
"aliases" : [ ],
"label" : "Primary Key Required",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not a primary key is required for the target table.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "validate_records",
"aliases" : [ ],
"label" : "Validate Records",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to validate records before writing them to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "temp_dir",
"aliases" : [ ],
"label" : "Temporary Directory",
"options" : [ ],
"kind" : "STRING",
"description" : "The directory to use for temporary files when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.host",
"aliases" : [ ],
"label" : "SSH Tunnel Host",
"options" : [ ],
"kind" : "STRING",
"description" : "Host of the bastion host, this is the host we'll connect to via ssh",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.port",
"aliases" : [ ],
"label" : "SSH Tunnel Port",
"value" : "22",
"options" : [ ],
"kind" : "INTEGER",
"description" : "Port to connect to bastion host",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.private_key",
"aliases" : [ ],
"label" : "SSH Tunnel Private Key",
"options" : [ ],
"kind" : "PASSWORD",
"description" : "A base64 encoded Private Key for authentication to the bastion host w/ key pair auth",
"hidden" : false,
"sensitive" : true,
"encoding" : "BASE64",
"protected" : false
}, {
"name" : "ssh_tunnel.private_key_password",
"aliases" : [ ],
"label" : "SSH Tunnel Private Key Password",
"options" : [ ],
"kind" : "PASSWORD",
"description" : "Private Key Password, leave None if no password is set",
"hidden" : false,
"sensitive" : true,
"protected" : false
}, {
"name" : "ssh_tunnel.username",
"aliases" : [ ],
"label" : "SSH Tunnel Username",
"options" : [ ],
"kind" : "STRING",
"description" : "Username to connect to bastion host",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.password",
"aliases" : [ ],
"label" : "SSH Tunnel Password",
"options" : [ ],
"kind" : "STRING",
"description" : "Password to connect to bastion host w/ basic auth",
"hidden" : false,
"sensitive" : true,
"protected" : false
}, {
"name" : "ssh_tunnel.host_setting_name",
"aliases" : [ ],
"value" : "host",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.port_setting_name",
"aliases" : [ ],
"value" : "port",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
} ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : "Postgres Warehouse is a data warehousing solution built on top of the Postgres database management system.\n\nPostgres Warehouse is designed to handle large volumes of data and complex queries, making it an ideal solution for businesses that need to store and analyze large amounts of data. It provides a number of features that are specifically tailored to data warehousing, such as columnar storage, parallel processing, and support for advanced analytics. Additionally, Postgres Warehouse is highly scalable, allowing businesses to easily add more resources as their data needs grow. Overall, Postgres Warehouse is a powerful and flexible data warehousing solution that can help businesses make better decisions by providing them with the insights they need to succeed.\n### Prerequisites\nThe process of obtaining the required settings for connecting to a Postgres Warehouse may vary depending on the specific setup and configuration of the database. However, here are some general ways to obtain each of the required settings:\n\n- User: The user is typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the username.\n- Password: The password is also typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the password.\n- Host: The host is the server where the database is located. You can ask the database administrator or check the database documentation to find out the host name or IP address.\n- Port: The port is the number that the database listens on for incoming connections. The default port for Postgres is 5432, but it may be different depending on the configuration. You can ask the database administrator or check the database documentation to find out the port number.\n- Database Name: The database name is the name of the specific database you want to connect to. You can ask the database administrator or check the database documentation to find out the database name.\n- Default Target Schema: The default target schema is the schema that you want to use as the default when connecting to the database. This may be set up by the database administrator or you may need to create it yourself. You can ask the database administrator or check the database documentation to find out the default target schema.\n\n## Settings\n\n\n### User\n\nThe username used to connect to the Postgres Warehouse.\n\n### Password\n\nThe password used to authenticate the user.\n\n### Host\n\nThe hostname or IP address of the Postgres Warehouse server.\n\n### Port\n\nThe port number used to connect to the Postgres Warehouse server.\n\n### Database Name\n\nThe name of the database to connect to.\n\n### Default Target Schema\n\nThe default schema to use when writing data to the Postgres Warehouse.\n\n### State Schema\n\nThe default schema to use when writing Meltano state.\n\n### Batch Size Rows\n\nThe number of rows to write to the Postgres Warehouse in each batch.\n\n### Underscore Camel Case Fields\n\nWhether or not to convert field names from camel case to underscore-separated format.\n\n### Primary Key Required\n\nWhether or not a primary key is required for the target table.\n\n### Validate Records\n\nWhether or not to validate records before writing them to the Postgres Warehouse.\n\n### SSH Tunnel Host\n\nHost of the bastion host, this is the host we'll connect to via ssh\n\n### SSH Tunnel Port\n\nPort to connect to bastion host\n\n### SSH Tunnel Private Key\n\nA base64 encoded Private Key for authentication to the bastion host w/ key pair auth\n\n### SSH Tunnel Private Key Password\n\nPrivate Key Password, leave None if no password is set\n\n### SSH Tunnel Username\n\nUsername to connect to bastion host\n\n### SSH Tunnel Password\n\nPassword to connect to bastion host w/ basic auth",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269",
"type" : "DELETE"
}
}
}
},
"draft" : false,
"managed" : true,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
}
}
}, {
"id" : "b4f232d4-29c3-4646-b4c6-f54850843c44",
"created" : "2026-04-23T13:09:41.746029",
"lastModified" : "2026-04-23T13:09:41.74603",
"name" : "dbt",
"properties" : { },
"commands" : {
"compile" : {
"args" : "compile",
"description" : "Generates executable SQL from source model, test, and analysis files. Compiled SQL files are written to the target/ directory."
},
"seed" : {
"args" : "seed",
"description" : "Load data from csv files into your data warehouse."
},
"test" : {
"args" : "test",
"description" : "Runs tests on data in deployed models."
},
"docs-generate" : {
"args" : "docs generate",
"description" : "Generate documentation artifacts for your project."
},
"deps" : {
"args" : "deps",
"description" : "Pull the most recent version of the dependencies listed in packages.yml"
},
"run" : {
"args" : "run",
"description" : "Compile SQL and execute against the current target database."
},
"clean" : {
"args" : "clean",
"description" : "Delete all folders in the clean-targets list (usually the dbt_modules and target directories.)"
},
"snapshot" : {
"args" : "snapshot",
"description" : "Execute snapshots defined in your project."
}
},
"dataPlugin" : "transformers/dbt--dbt-labs",
"dataPluginType" : "transformer",
"dataPluginLogoUrl" : "/assets/images/transformer/dbt.png",
"_embedded" : {
"dataplugin" : {
"id" : "0a83351b-4992-4cbe-aa0e-954115e7002d",
"pluginType" : "TRANSFORMER",
"name" : "dbt",
"namespace" : "dbt",
"variant" : "dbt-labs",
"label" : "dbt",
"description" : " Power your project transformations with dbt™, a SQL-first transformation tool that enables analytics engineers to develop transformations with code.\n\n***Version Control and CI/CD***\n\nUse Matatika to deploy and promote changes between dev, UAT, and production environments.\n\n***Test and Document***\n\nUse Matatika to develop and test every model prior to production release, and share dynamically generated documentation with all stakeholders.\n\n***Develop***\n\nWrite modular data transformations in .sql – Matatika together with dbt handles the chore of dependency management. ",
"logoUrl" : "/assets/images/transformer/dbt.png",
"hidden" : false,
"docs" : "https://www.matatika.com/data-details/dbt/",
"pipUrl" : "dbt-core~=1.7.0 dbt-postgres~=1.7.0 dbt-snowflake~=1.7.0 dbt-bigquery~=1.7.0 certifi==2025.1.31",
"repo" : "https://github.com/dbt-labs/dbt-core",
"capabilities" : [ ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "project_dir",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/transform",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "profiles_dir",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/transform/profile",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"env" : "DBT_PROFILES_DIR",
"protected" : false
}, {
"name" : "target",
"aliases" : [ ],
"value" : "$MELTANO_LOAD__DIALECT",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "source_schema",
"aliases" : [ ],
"value" : "$MELTANO_LOAD__TARGET_SCHEMA",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "target_schema",
"aliases" : [ ],
"value" : "analytics",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "target_path",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/.meltano/transformers/dbt/target",
"options" : [ ],
"kind" : "STRING",
"description" : "Output path for dbt generated artifacts",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "models",
"aliases" : [ ],
"value" : "$MELTANO_TRANSFORM__PACKAGE_NAME $MELTANO_EXTRACTOR_NAMESPACE my_meltano_project",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "secret_git_credential",
"aliases" : [ ],
"options" : [ ],
"kind" : "STRING",
"description" : "A convenient and simple way to supply a git credential for packages resolve by dbt:deps",
"hidden" : false,
"sensitive" : true,
"env" : "DBT_ENV_SECRET_GIT_CREDENTIAL",
"protected" : false
} ],
"variants" : [ ],
"commands" : {
"compile" : {
"args" : "compile",
"description" : "Generates executable SQL from source model, test, and analysis files. Compiled SQL files are written to the target/ directory."
},
"seed" : {
"args" : "seed",
"description" : "Load data from csv files into your data warehouse."
},
"test" : {
"args" : "test",
"description" : "Runs tests on data in deployed models."
},
"docs-generate" : {
"args" : "docs generate",
"description" : "Generate documentation artifacts for your project."
},
"deps" : {
"args" : "deps",
"description" : "Pull the most recent version of the dependencies listed in packages.yml"
},
"run" : {
"args" : "run",
"description" : "Compile SQL and execute against the current target database."
},
"clean" : {
"args" : "clean",
"description" : "Delete all folders in the clean-targets list (usually the dbt_modules and target directories.)"
},
"snapshot" : {
"args" : "snapshot",
"description" : "Execute snapshots defined in your project."
}
},
"matatikaHidden" : false,
"requires" : [ {
"id" : "e6c1ad3d-ebf5-4c4a-b129-f68156b47555",
"pluginType" : "FILE",
"name" : "files-dbt",
"namespace" : "dbt",
"variant" : "matatika",
"description" : " Files dbt is a file bundle that automatically configures your project to run transforms with dbt.\nThe bundle includes template project configuration:\n\n- transform/models (directory)\n- transform/profile/profiles.yml\n- transform/dbt_project.yml\n- transform/.gitignore\n- transform/macros/centralize_test_failures.sql\n",
"hidden" : false,
"pipUrl" : "git+https://github.com/Matatika/files-dbt@v1.3",
"repo" : "https://github.com/Matatika/files-dbt",
"capabilities" : [ ],
"select" : [ ],
"update" : {
"transform/profile/profiles.yml" : "true"
},
"vars" : { },
"settings" : [ ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : " Files dbt is a file bundle that automatically configures your project to run transforms with dbt.\nThe bundle includes template project configuration:\n\n- transform/models (directory)\n- transform/profile/profiles.yml\n- transform/dbt_project.yml\n- transform/.gitignore\n- transform/macros/centralize_test_failures.sql\n"
} ],
"fullDescription" : " Power your project transformations with dbt™, a SQL-first transformation tool that enables analytics engineers to develop transformations with code.\n\n***Version Control and CI/CD***\n\nUse Matatika to deploy and promote changes between dev, UAT, and production environments.\n\n***Test and Document***\n\nUse Matatika to develop and test every model prior to production release, and share dynamically generated documentation with all stakeholders.\n\n***Develop***\n\nWrite modular data transformations in .sql – Matatika together with dbt handles the chore of dependency management. \n\n## Settings\n\n\n### target_path\n\nOutput path for dbt generated artifacts\n\n### secret_git_credential\n\nA convenient and simple way to supply a git credential for packages resolve by dbt:deps",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d",
"type" : "DELETE"
}
}
}
},
"draft" : false,
"managed" : true,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
}
}
} ]
},
"_links" : {
"update pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"type" : "PUT"
},
"delete pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"type" : "DELETE"
},
"draft pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/draft",
"type" : "PUT"
},
"self" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5"
},
"environment" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/environment"
},
"jobs" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/jobs",
"type" : "GET"
},
"metrics" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/metrics"
},
"add subscription" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/subscriptions"
},
"verify pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/verification",
"type" : "POST"
},
"create job" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/jobs",
"type" : "POST"
}
}
}
Initialise a pipeline in a workspace
POST /api/workspaces/{workspace-id}/pipelines
Initialises a new pipeline in the workspace {workspace-id}.
Prerequisites
- Workspace
{workspace-id}must exist
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines' -i -X POST \
-H 'Content-Type: application/json'
import requests
url = "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines"
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("POST", url, headers=headers)
print(response.text.encode('utf8'))
Response
200 OK
Pipeline with HAL links.
{
"id" : "c2791eb3-7ea2-408f-b1a7-3fc3f3045006",
"status" : "PROVISIONING",
"timeout" : 0,
"maxRetries" : 0,
"created" : "2026-04-23T13:09:47.017307909",
"lastModified" : "2026-04-23T13:09:47.017308309",
"properties" : { },
"dataComponents" : [ ],
"actions" : [ ],
"triggeredBy" : [ ],
"_links" : {
"create pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006",
"type" : "PUT"
},
"draft pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/draft",
"type" : "PUT"
},
"validate pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/validation",
"type" : "POST"
}
}
}
Create or update a pipeline in a workspace
PUT /api/workspaces/{workspace-id}/pipelines/{pipeline-id}
Creates or updates the pipeline {pipeline-id} in the workspace {workspace-id}.
Prerequisites
- Workspace
{workspace-id}must exist
Body
Pipeline resource.
{
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.043082601]",
"dataComponents" : [ "extractors/tap-google-analytics", "Warehouse", "dbt" ],
"schedule" : "0 0 0 25 12 ?",
"properties" : {
"tap-google-analytics.start_date" : "2026-03-23T13:09:47.048027582Z",
"tap-google-analytics.property_id" : "1234567890"
}
}
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.043082601]",
"dataComponents" : [ "extractors/tap-google-analytics", "Warehouse", "dbt" ],
"schedule" : "0 0 0 25 12 ?",
"properties" : {
"tap-google-analytics.start_date" : "2026-03-23T13:09:47.048027582Z",
"tap-google-analytics.property_id" : "1234567890"
}
}'
import requests
url = "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006"
data = {
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.043082601]",
"dataComponents" : [ "extractors/tap-google-analytics", "Warehouse", "dbt" ],
"schedule" : "0 0 0 25 12 ?",
"properties" : {
"tap-google-analytics.start_date" : "2026-03-23T13:09:47.048027582Z",
"tap-google-analytics.property_id" : "1234567890"
}
}
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("PUT", url, headers=headers, data=data)
print(response.text.encode('utf8'))
Response
200 OK / 201 Created
Pipeline with HAL links.
{
"id" : "c2791eb3-7ea2-408f-b1a7-3fc3f3045006",
"status" : "READY",
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.043082601]",
"name" : "sit-generated-pipeline-[2026-04-23t13:09:47.043082601]",
"schedule" : "0 0 0 25 12 ?",
"timeout" : 0,
"maxRetries" : 0,
"created" : "2026-04-23T13:09:47.24719",
"lastModified" : "2026-04-23T13:09:47.247191",
"properties" : {
"tap-google-analytics.start_date" : "2026-03-23T13:09:47.048027582Z",
"tap-google-analytics.property_id" : "1234567890"
},
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ],
"actions" : [ ],
"triggeredBy" : [ ],
"_embedded" : {
"dataComponents" : [ {
"id" : "e8c1225b-48e6-46f8-ad51-559ffba0b046",
"created" : "2026-04-23T13:09:47.138824",
"lastModified" : "2026-04-23T13:09:47.138826",
"name" : "tap-google-analytics",
"properties" : { },
"commands" : { },
"dataPlugin" : "extractors/tap-google-analytics--meltanolabs",
"dataPluginType" : "extractor",
"dataPluginLogoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"_embedded" : {
"dataplugin" : {
"id" : "55b21332-a082-4d7c-8f7f-b9f2032a0741",
"pluginType" : "EXTRACTOR",
"name" : "tap-google-analytics",
"namespace" : "tap_google_analytics",
"variant" : "meltanolabs",
"label" : "Google Analytics",
"description" : "Meltano Tap Google Analytics is a Singer tap for extracting Google Analytics 4 (GA4)\ndata into Meltano Cloud for reporting, modelling, and downstream analysis.\n\nIt helps you collect website and app performance data from Google Analytics in a\nrepeatable pipeline so you can analyse traffic, engagement, locations, devices,\npages, and revenue-related activity alongside data from your other business systems.\n\nUse this connector when you want to:\n\n- centralise Google Analytics data in your warehouse\n- build dashboards and reports on website performance\n- track traffic sources, user behaviour, and engagement trends over time\n- combine analytics data with advertising, CRM, sales, or product data\n- customise the extracted reports using your own stream definitions\n\n## Setup\n\nIn [Google Analytics](https://analytics.google.com/):\n1. Select the property you want to extract data for\n1. Go to \"Admin\" -> \"Property\" -> \"Property details\"\n1. Copy the \"PROPERTY ID\"\n\nIn Meltano Cloud:\n1. Login and connect with your Google account\n1. Enter the property ID\n1. Choose a start date for extraction\n\n## Streams\n\nThe tap provides the following default streams:\n\n### `website_overview`\n\nOverview of the website performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `traffic_sources`\n\nWhere website traffic originates from.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`source` | Dimension. The source that sent traffic, such as a website or referrer.\n`medium` | Dimension. The marketing medium for the traffic source, such as organic, referral, or cpc.\n`sourcePlatform` | Dimension. The platform associated with the traffic source.\n`activeUsers` | Metric. The number of active users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `locations`\n\nWebsite activity by country, region, and city.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`country` | Dimension. The country where the activity originated.\n`countryId` | Dimension. The Google Analytics identifier for the country.\n`region` | Dimension. The region or state where the activity originated.\n`city` | Dimension. The city where the activity originated.\n`cityId` | Dimension. The Google Analytics identifier for the city.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `four_weekly_active_users`\n\nActive users measured over a rolling 28 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active28DayUsers` | Metric. The number of active users over the last 28 days.\n\n### `weekly_active_users`\n\nActive users measured over a rolling 7 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active7DayUsers` | Metric. The number of active users over the last 7 days.\n\n### `daily_active_users`\n\nActive users measured over a rolling 1 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active1DayUsers` | Metric. The number of active users over the last 1 day.\n\n### `devices`\n\nWebsite activity by device, operating system, and browser.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`deviceCategory` | Dimension. The type of device used, such as desktop, tablet, or mobile.\n`deviceModel` | Dimension. The model of device used by the visitor.\n`operatingSystem` | Dimension. The operating system used by the visitor.\n`browser` | Dimension. The browser used by the visitor.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `transactions`\n\nRevenue and transaction performance overview.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`averageRevenuePerUser` | Metric. The average revenue generated per user.\n`newUsers` | Metric. The number of first-time users.\n`purchaseRevenue` | Metric. The revenue generated from purchases.\n`sessions` | Metric. The number of sessions recorded.\n`totalRevenue` | Metric. The total revenue attributed in the report.\n`transactions` | Metric. The number of completed transactions.\n\n### `pages`\n\nPage-level traffic and engagement performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`hostName` | Dimension. The hostname where the page was viewed.\n`pagePath` | Dimension. The path portion of the viewed page URL.\n`sessionMedium` | Dimension. The session-level marketing medium.\n`sessionSource` | Dimension. The session-level traffic source.\n`activeUsers` | Metric. The number of active users.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagedSessions` | Metric. The number of engaged sessions.\n`engagementRate` | Metric. The percentage of engaged sessions.\n`eventCount` | Metric. The total number of tracked events.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerUser` | Metric. The average number of page or screen views per user.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`userEngagementDuration` | Metric. The amount of time users were actively engaged.\n\n## Custom Streams\n\nThe tap also supports custom streams. When custom stream definitions are specified,\nthey override all default streams.",
"logoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"hidden" : false,
"pipUrl" : "git+https://github.com/MeltanoLabs/tap-google-analytics.git@v0.1.1",
"repo" : "https://github.com/MeltanoLabs/tap-google-analytics",
"capabilities" : [ "ABOUT", "STREAM_MAPS", "SCHEMA_FLATTENING", "CATALOG", "DISCOVER", "STATE" ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "oauth_credentials.authorization_url",
"aliases" : [ ],
"value" : "https://accounts.google.com/o/oauth2/v2/auth",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.scope",
"aliases" : [ ],
"value" : "https://www.googleapis.com/auth/analytics.readonly",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "oauth_credentials.access_token",
"aliases" : [ ],
"label" : "OAuth Credentials Access Token",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Access Token",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_token",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Token",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Token",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_proxy_url",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Proxy URL",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Proxy URL. If your refresh token needs to be refreshed through a proxy, you can provide the URL here.",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_proxy_url_auth",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Proxy URL Auth",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Proxy URL Auth. If your refresh token needs to be refreshed through a proxy, you can provide the URL here.",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "property_id",
"aliases" : [ ],
"label" : "Property ID",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Property ID.\n\nTo find this in Google Analytics:\n\n1. Log in to the Analytics dashboard\n1. Select the property\n1. Go to \"Admin\"\n1. Under \"Property\", open \"Property details\"\n1. Copy the \"Property ID\"",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "start_date",
"aliases" : [ ],
"label" : "Start Date",
"options" : [ ],
"kind" : "DATE_ISO8601",
"description" : "The earliest record date to sync",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "reports",
"aliases" : [ ],
"label" : "Report definitions file",
"options" : [ ],
"placeholder" : "Ex. my_report_definition.json",
"kind" : "STRING",
"description" : "Google Analytics Reports Definition.\nThe tap uses the [default reports definition](https://github.com/MeltanoLabs/tap-google-analytics/blob/main/tap_google_analytics/defaults/default_report_definition.json)\nif this field is not provided.\nA project-relative path to JSON file with the definition of the reports to be generated.\n\nSee <https://ga-dev-tools.google/ga4/dimensions-metrics-explorer/> for valid dimensions and metrics.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n { \"name\" : \"name of stream to be used\",\n \"dimensions\" :\n [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\",\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\" :\n [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\",\n // ... up to 10 metrics per stream ...\n ]\n },\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, if you want to extract user stats per day in a `users_per_day` stream and session stats per day and country in a `sessions_per_country_day` stream:\n\n```json\n[\n { \"name\" : \"users_per_day\",\n \"dimensions\" :\n [\n \"date\"\n ],\n \"metrics\" :\n [\n \"newUsers\",\n \"active1DayUsers\"\n ]\n },\n { \"name\" : \"sessions_per_country_day\",\n \"dimensions\" :\n [\n \"date\",\n \"country\"\n ],\n \"metrics\" :\n [\n \"sessions\",\n \"sessionsPerUser\",\n \"avgSessionDuration\"\n ]\n }\n]\n```\n",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "reports_list",
"aliases" : [ ],
"label" : "Report definitions list",
"options" : [ ],
"kind" : "ARRAY",
"description" : "A list of report definitions to be generated directly in the config.\nEach object in the list defines a report/stream to extract, including the stream name,\nthe Google Analytics dimensions, and the metrics to request.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n {\n \"name\": \"name of stream to be used\",\n \"dimensions\": [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\"\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\": [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\"\n // ... up to 10 metrics per stream ...\n ]\n }\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, you can define multiple reports inline like this:\n\n```json\n[\n {\n \"name\": \"traffic_overview\",\n \"dimensions\": [\"date\", \"country\"],\n \"metrics\": [\"activeUsers\", \"sessions\"]\n },\n {\n \"name\": \"device_analysis\",\n \"dimensions\": [\"date\", \"deviceCategory\"],\n \"metrics\": [\"activeUsers\", \"engagedSessions\", \"engagementRate\"]\n },\n {\n \"name\": \"traffic_source_analysis\",\n \"dimensions\": [\"date\", \"sessionSource\", \"sessionMedium\"],\n \"metrics\": [\"activeUsers\", \"sessions\", \"eventCount\"]\n },\n {\n \"name\": \"top_pages\",\n \"dimensions\": [\"date\", \"pagePath\"],\n \"metrics\": [\"screenPageViews\", \"activeUsers\"]\n },\n {\n \"name\": \"engagement_report\",\n \"dimensions\": [\"date\"],\n \"metrics\": [\"engagedSessions\", \"engagementRate\", \"userEngagementDuration\"]\n }\n]\n```\n",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "end_date",
"aliases" : [ ],
"label" : "End Date",
"options" : [ ],
"kind" : "DATE_ISO8601",
"description" : "The last record date to sync",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flattening_enabled",
"aliases" : [ ],
"label" : "Flattening Enabled",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "'True' to enable schema flattening and automatically expand nested properties.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flattening_max_depth",
"aliases" : [ ],
"label" : "Flattening Max Depth",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The max depth to flatten schemas.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "stream_map_config",
"aliases" : [ ],
"label" : "Stream Map Config",
"options" : [ ],
"kind" : "OBJECT",
"description" : "User-defined config values to be used within map expressions.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "stream_maps",
"aliases" : [ ],
"label" : "Stream Maps",
"options" : [ ],
"kind" : "OBJECT",
"description" : "Config object for stream maps capability. For more information check out [Stream Maps](https://sdk.meltano.com/en/latest/stream_maps.html).",
"hidden" : false,
"sensitive" : false,
"protected" : false
} ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : "Meltano Tap Google Analytics is a Singer tap for extracting Google Analytics 4 (GA4)\ndata into Meltano Cloud for reporting, modelling, and downstream analysis.\n\nIt helps you collect website and app performance data from Google Analytics in a\nrepeatable pipeline so you can analyse traffic, engagement, locations, devices,\npages, and revenue-related activity alongside data from your other business systems.\n\nUse this connector when you want to:\n\n- centralise Google Analytics data in your warehouse\n- build dashboards and reports on website performance\n- track traffic sources, user behaviour, and engagement trends over time\n- combine analytics data with advertising, CRM, sales, or product data\n- customise the extracted reports using your own stream definitions\n\n## Setup\n\nIn [Google Analytics](https://analytics.google.com/):\n1. Select the property you want to extract data for\n1. Go to \"Admin\" -> \"Property\" -> \"Property details\"\n1. Copy the \"PROPERTY ID\"\n\nIn Meltano Cloud:\n1. Login and connect with your Google account\n1. Enter the property ID\n1. Choose a start date for extraction\n\n## Streams\n\nThe tap provides the following default streams:\n\n### `website_overview`\n\nOverview of the website performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `traffic_sources`\n\nWhere website traffic originates from.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`source` | Dimension. The source that sent traffic, such as a website or referrer.\n`medium` | Dimension. The marketing medium for the traffic source, such as organic, referral, or cpc.\n`sourcePlatform` | Dimension. The platform associated with the traffic source.\n`activeUsers` | Metric. The number of active users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `locations`\n\nWebsite activity by country, region, and city.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`country` | Dimension. The country where the activity originated.\n`countryId` | Dimension. The Google Analytics identifier for the country.\n`region` | Dimension. The region or state where the activity originated.\n`city` | Dimension. The city where the activity originated.\n`cityId` | Dimension. The Google Analytics identifier for the city.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `four_weekly_active_users`\n\nActive users measured over a rolling 28 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active28DayUsers` | Metric. The number of active users over the last 28 days.\n\n### `weekly_active_users`\n\nActive users measured over a rolling 7 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active7DayUsers` | Metric. The number of active users over the last 7 days.\n\n### `daily_active_users`\n\nActive users measured over a rolling 1 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active1DayUsers` | Metric. The number of active users over the last 1 day.\n\n### `devices`\n\nWebsite activity by device, operating system, and browser.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`deviceCategory` | Dimension. The type of device used, such as desktop, tablet, or mobile.\n`deviceModel` | Dimension. The model of device used by the visitor.\n`operatingSystem` | Dimension. The operating system used by the visitor.\n`browser` | Dimension. The browser used by the visitor.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `transactions`\n\nRevenue and transaction performance overview.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`averageRevenuePerUser` | Metric. The average revenue generated per user.\n`newUsers` | Metric. The number of first-time users.\n`purchaseRevenue` | Metric. The revenue generated from purchases.\n`sessions` | Metric. The number of sessions recorded.\n`totalRevenue` | Metric. The total revenue attributed in the report.\n`transactions` | Metric. The number of completed transactions.\n\n### `pages`\n\nPage-level traffic and engagement performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`hostName` | Dimension. The hostname where the page was viewed.\n`pagePath` | Dimension. The path portion of the viewed page URL.\n`sessionMedium` | Dimension. The session-level marketing medium.\n`sessionSource` | Dimension. The session-level traffic source.\n`activeUsers` | Metric. The number of active users.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagedSessions` | Metric. The number of engaged sessions.\n`engagementRate` | Metric. The percentage of engaged sessions.\n`eventCount` | Metric. The total number of tracked events.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerUser` | Metric. The average number of page or screen views per user.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`userEngagementDuration` | Metric. The amount of time users were actively engaged.\n\n## Custom Streams\n\nThe tap also supports custom streams. When custom stream definitions are specified,\nthey override all default streams.\n\n## Settings\n\n\n### Property ID\n\nGoogle Analytics Property ID.\n\nTo find this in Google Analytics:\n\n1. Log in to the Analytics dashboard\n1. Select the property\n1. Go to \"Admin\"\n1. Under \"Property\", open \"Property details\"\n1. Copy the \"Property ID\"\n\n### Start Date\n\nThe earliest record date to sync\n\n### Report definitions file\n\nGoogle Analytics Reports Definition.\nThe tap uses the [default reports definition](https://github.com/MeltanoLabs/tap-google-analytics/blob/main/tap_google_analytics/defaults/default_report_definition.json)\nif this field is not provided.\nA project-relative path to JSON file with the definition of the reports to be generated.\n\nSee <https://ga-dev-tools.google/ga4/dimensions-metrics-explorer/> for valid dimensions and metrics.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n { \"name\" : \"name of stream to be used\",\n \"dimensions\" :\n [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\",\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\" :\n [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\",\n // ... up to 10 metrics per stream ...\n ]\n },\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, if you want to extract user stats per day in a `users_per_day` stream and session stats per day and country in a `sessions_per_country_day` stream:\n\n```json\n[\n { \"name\" : \"users_per_day\",\n \"dimensions\" :\n [\n \"date\"\n ],\n \"metrics\" :\n [\n \"newUsers\",\n \"active1DayUsers\"\n ]\n },\n { \"name\" : \"sessions_per_country_day\",\n \"dimensions\" :\n [\n \"date\",\n \"country\"\n ],\n \"metrics\" :\n [\n \"sessions\",\n \"sessionsPerUser\",\n \"avgSessionDuration\"\n ]\n }\n]\n```\n\n\n### Report definitions list\n\nA list of report definitions to be generated directly in the config.\nEach object in the list defines a report/stream to extract, including the stream name,\nthe Google Analytics dimensions, and the metrics to request.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n {\n \"name\": \"name of stream to be used\",\n \"dimensions\": [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\"\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\": [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\"\n // ... up to 10 metrics per stream ...\n ]\n }\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, you can define multiple reports inline like this:\n\n```json\n[\n {\n \"name\": \"traffic_overview\",\n \"dimensions\": [\"date\", \"country\"],\n \"metrics\": [\"activeUsers\", \"sessions\"]\n },\n {\n \"name\": \"device_analysis\",\n \"dimensions\": [\"date\", \"deviceCategory\"],\n \"metrics\": [\"activeUsers\", \"engagedSessions\", \"engagementRate\"]\n },\n {\n \"name\": \"traffic_source_analysis\",\n \"dimensions\": [\"date\", \"sessionSource\", \"sessionMedium\"],\n \"metrics\": [\"activeUsers\", \"sessions\", \"eventCount\"]\n },\n {\n \"name\": \"top_pages\",\n \"dimensions\": [\"date\", \"pagePath\"],\n \"metrics\": [\"screenPageViews\", \"activeUsers\"]\n },\n {\n \"name\": \"engagement_report\",\n \"dimensions\": [\"date\"],\n \"metrics\": [\"engagedSessions\", \"engagementRate\", \"userEngagementDuration\"]\n }\n]\n```\n\n\n### End Date\n\nThe last record date to sync\n\n### Flattening Enabled\n\n'True' to enable schema flattening and automatically expand nested properties.\n\n### Flattening Max Depth\n\nThe max depth to flatten schemas.\n\n### Stream Map Config\n\nUser-defined config values to be used within map expressions.\n\n### Stream Maps\n\nConfig object for stream maps capability. For more information check out [Stream Maps](https://sdk.meltano.com/en/latest/stream_maps.html).",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741",
"type" : "DELETE"
}
}
}
},
"draft" : true,
"managed" : false,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
}
}
}, {
"id" : "ef91b260-3416-4405-8fe7-c1887f7992ea",
"created" : "2026-04-23T13:09:41.664014",
"lastModified" : "2026-04-23T13:09:41.664014",
"name" : "Warehouse",
"properties" : {
"password" : "0K89mftB_BXs2mr0s_t918yYTe",
"default_target_schema" : "analytics",
"dbname" : "rhklhef",
"port" : "5432",
"host" : "sharp-banana2.postgres.database.azure.com",
"user" : "rhklhef"
},
"commands" : { },
"dataPlugin" : "loaders/target-postgres--matatika",
"dataPluginType" : "loader",
"dataPluginLogoUrl" : "/assets/logos/loaders/postgres.png",
"_embedded" : {
"dataplugin" : {
"id" : "215e1d33-1e0e-4600-8e14-20148fab4269",
"pluginType" : "LOADER",
"name" : "target-postgres",
"namespace" : "postgres_transferwise",
"variant" : "matatika",
"label" : "Postgres Warehouse",
"description" : "Postgres Warehouse is a data warehousing solution built on top of the Postgres database management system.\n\nPostgres Warehouse is designed to handle large volumes of data and complex queries, making it an ideal solution for businesses that need to store and analyze large amounts of data. It provides a number of features that are specifically tailored to data warehousing, such as columnar storage, parallel processing, and support for advanced analytics. Additionally, Postgres Warehouse is highly scalable, allowing businesses to easily add more resources as their data needs grow. Overall, Postgres Warehouse is a powerful and flexible data warehousing solution that can help businesses make better decisions by providing them with the insights they need to succeed.\n### Prerequisites\nThe process of obtaining the required settings for connecting to a Postgres Warehouse may vary depending on the specific setup and configuration of the database. However, here are some general ways to obtain each of the required settings:\n\n- User: The user is typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the username.\n- Password: The password is also typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the password.\n- Host: The host is the server where the database is located. You can ask the database administrator or check the database documentation to find out the host name or IP address.\n- Port: The port is the number that the database listens on for incoming connections. The default port for Postgres is 5432, but it may be different depending on the configuration. You can ask the database administrator or check the database documentation to find out the port number.\n- Database Name: The database name is the name of the specific database you want to connect to. You can ask the database administrator or check the database documentation to find out the database name.\n- Default Target Schema: The default target schema is the schema that you want to use as the default when connecting to the database. This may be set up by the database administrator or you may need to create it yourself. You can ask the database administrator or check the database documentation to find out the default target schema.",
"logoUrl" : "/assets/logos/loaders/postgres.png",
"hidden" : false,
"docs" : "https://www.matatika.com/data-details/target-postgres/",
"pipUrl" : "git+https://github.com/Matatika/pipelinewise-target-postgres.git@v0.2.1",
"repo" : "https://github.com/Matatika/pipelinewise-target-postgres",
"capabilities" : [ ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "user",
"aliases" : [ "username" ],
"label" : "User",
"options" : [ ],
"kind" : "STRING",
"description" : "The username used to connect to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "password",
"aliases" : [ ],
"label" : "Password",
"options" : [ ],
"kind" : "STRING",
"description" : "The password used to authenticate the user.",
"hidden" : false,
"sensitive" : true,
"required" : "true",
"protected" : false
}, {
"name" : "host",
"aliases" : [ "address" ],
"label" : "Host",
"options" : [ ],
"kind" : "STRING",
"description" : "The hostname or IP address of the Postgres Warehouse server.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "port",
"aliases" : [ ],
"label" : "Port",
"value" : "5432",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The port number used to connect to the Postgres Warehouse server.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "dbname",
"aliases" : [ "database" ],
"label" : "Database Name",
"options" : [ ],
"kind" : "STRING",
"description" : "The name of the database to connect to.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "default_target_schema",
"aliases" : [ ],
"label" : "Default Target Schema",
"value" : "analytics",
"options" : [ ],
"kind" : "STRING",
"description" : "The default schema to use when writing data to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "state_schema",
"aliases" : [ ],
"label" : "State Schema",
"value" : "public",
"options" : [ ],
"kind" : "STRING",
"description" : "The default schema to use when writing Meltano state.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "ssl",
"aliases" : [ ],
"label" : "SSL",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to use SSL encryption when connecting to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false,
"value_post_processor" : "STRINGIFY"
}, {
"name" : "batch_size_rows",
"aliases" : [ ],
"label" : "Batch Size Rows",
"value" : "100000",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The number of rows to write to the Postgres Warehouse in each batch.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "underscore_camel_case_fields",
"aliases" : [ ],
"label" : "Underscore Camel Case Fields",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to convert field names from camel case to underscore-separated format.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flush_all_streams",
"aliases" : [ ],
"label" : "Flush All Streams",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to flush all streams to the Postgres Warehouse before closing the connection.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "parallelism",
"aliases" : [ ],
"label" : "Parallelism",
"value" : "-1",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The number of threads to use when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "parallelism_max",
"aliases" : [ ],
"label" : "Max Parallelism",
"value" : "16",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The maximum number of threads to use when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "default_target_schema_select_permission",
"aliases" : [ ],
"label" : "Default Target Schema Select Permission",
"options" : [ ],
"kind" : "STRING",
"description" : "The permission level required to select data from the default target schema.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "schema_mapping",
"aliases" : [ ],
"label" : "Schema Mapping",
"options" : [ ],
"kind" : "STRING",
"description" : "A mapping of source schema names to target schema names.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "add_metadata_columns",
"aliases" : [ ],
"label" : "Add Metadata Columns",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to add metadata columns to the target table.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "hard_delete",
"aliases" : [ ],
"label" : "Hard Delete",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to perform hard deletes when deleting data from the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "data_flattening_max_level",
"aliases" : [ ],
"label" : "Data Flattening Max Level",
"value" : "10",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The maximum level of nested data structures to flatten when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "primary_key_required",
"aliases" : [ ],
"label" : "Primary Key Required",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not a primary key is required for the target table.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "validate_records",
"aliases" : [ ],
"label" : "Validate Records",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to validate records before writing them to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "temp_dir",
"aliases" : [ ],
"label" : "Temporary Directory",
"options" : [ ],
"kind" : "STRING",
"description" : "The directory to use for temporary files when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.host",
"aliases" : [ ],
"label" : "SSH Tunnel Host",
"options" : [ ],
"kind" : "STRING",
"description" : "Host of the bastion host, this is the host we'll connect to via ssh",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.port",
"aliases" : [ ],
"label" : "SSH Tunnel Port",
"value" : "22",
"options" : [ ],
"kind" : "INTEGER",
"description" : "Port to connect to bastion host",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.private_key",
"aliases" : [ ],
"label" : "SSH Tunnel Private Key",
"options" : [ ],
"kind" : "PASSWORD",
"description" : "A base64 encoded Private Key for authentication to the bastion host w/ key pair auth",
"hidden" : false,
"sensitive" : true,
"encoding" : "BASE64",
"protected" : false
}, {
"name" : "ssh_tunnel.private_key_password",
"aliases" : [ ],
"label" : "SSH Tunnel Private Key Password",
"options" : [ ],
"kind" : "PASSWORD",
"description" : "Private Key Password, leave None if no password is set",
"hidden" : false,
"sensitive" : true,
"protected" : false
}, {
"name" : "ssh_tunnel.username",
"aliases" : [ ],
"label" : "SSH Tunnel Username",
"options" : [ ],
"kind" : "STRING",
"description" : "Username to connect to bastion host",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.password",
"aliases" : [ ],
"label" : "SSH Tunnel Password",
"options" : [ ],
"kind" : "STRING",
"description" : "Password to connect to bastion host w/ basic auth",
"hidden" : false,
"sensitive" : true,
"protected" : false
}, {
"name" : "ssh_tunnel.host_setting_name",
"aliases" : [ ],
"value" : "host",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.port_setting_name",
"aliases" : [ ],
"value" : "port",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
} ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : "Postgres Warehouse is a data warehousing solution built on top of the Postgres database management system.\n\nPostgres Warehouse is designed to handle large volumes of data and complex queries, making it an ideal solution for businesses that need to store and analyze large amounts of data. It provides a number of features that are specifically tailored to data warehousing, such as columnar storage, parallel processing, and support for advanced analytics. Additionally, Postgres Warehouse is highly scalable, allowing businesses to easily add more resources as their data needs grow. Overall, Postgres Warehouse is a powerful and flexible data warehousing solution that can help businesses make better decisions by providing them with the insights they need to succeed.\n### Prerequisites\nThe process of obtaining the required settings for connecting to a Postgres Warehouse may vary depending on the specific setup and configuration of the database. However, here are some general ways to obtain each of the required settings:\n\n- User: The user is typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the username.\n- Password: The password is also typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the password.\n- Host: The host is the server where the database is located. You can ask the database administrator or check the database documentation to find out the host name or IP address.\n- Port: The port is the number that the database listens on for incoming connections. The default port for Postgres is 5432, but it may be different depending on the configuration. You can ask the database administrator or check the database documentation to find out the port number.\n- Database Name: The database name is the name of the specific database you want to connect to. You can ask the database administrator or check the database documentation to find out the database name.\n- Default Target Schema: The default target schema is the schema that you want to use as the default when connecting to the database. This may be set up by the database administrator or you may need to create it yourself. You can ask the database administrator or check the database documentation to find out the default target schema.\n\n## Settings\n\n\n### User\n\nThe username used to connect to the Postgres Warehouse.\n\n### Password\n\nThe password used to authenticate the user.\n\n### Host\n\nThe hostname or IP address of the Postgres Warehouse server.\n\n### Port\n\nThe port number used to connect to the Postgres Warehouse server.\n\n### Database Name\n\nThe name of the database to connect to.\n\n### Default Target Schema\n\nThe default schema to use when writing data to the Postgres Warehouse.\n\n### State Schema\n\nThe default schema to use when writing Meltano state.\n\n### Batch Size Rows\n\nThe number of rows to write to the Postgres Warehouse in each batch.\n\n### Underscore Camel Case Fields\n\nWhether or not to convert field names from camel case to underscore-separated format.\n\n### Primary Key Required\n\nWhether or not a primary key is required for the target table.\n\n### Validate Records\n\nWhether or not to validate records before writing them to the Postgres Warehouse.\n\n### SSH Tunnel Host\n\nHost of the bastion host, this is the host we'll connect to via ssh\n\n### SSH Tunnel Port\n\nPort to connect to bastion host\n\n### SSH Tunnel Private Key\n\nA base64 encoded Private Key for authentication to the bastion host w/ key pair auth\n\n### SSH Tunnel Private Key Password\n\nPrivate Key Password, leave None if no password is set\n\n### SSH Tunnel Username\n\nUsername to connect to bastion host\n\n### SSH Tunnel Password\n\nPassword to connect to bastion host w/ basic auth",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269",
"type" : "DELETE"
}
}
}
},
"draft" : false,
"managed" : true,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
}
}
}, {
"id" : "b4f232d4-29c3-4646-b4c6-f54850843c44",
"created" : "2026-04-23T13:09:41.746029",
"lastModified" : "2026-04-23T13:09:41.74603",
"name" : "dbt",
"properties" : { },
"commands" : {
"compile" : {
"args" : "compile",
"description" : "Generates executable SQL from source model, test, and analysis files. Compiled SQL files are written to the target/ directory."
},
"seed" : {
"args" : "seed",
"description" : "Load data from csv files into your data warehouse."
},
"test" : {
"args" : "test",
"description" : "Runs tests on data in deployed models."
},
"docs-generate" : {
"args" : "docs generate",
"description" : "Generate documentation artifacts for your project."
},
"deps" : {
"args" : "deps",
"description" : "Pull the most recent version of the dependencies listed in packages.yml"
},
"run" : {
"args" : "run",
"description" : "Compile SQL and execute against the current target database."
},
"clean" : {
"args" : "clean",
"description" : "Delete all folders in the clean-targets list (usually the dbt_modules and target directories.)"
},
"snapshot" : {
"args" : "snapshot",
"description" : "Execute snapshots defined in your project."
}
},
"dataPlugin" : "transformers/dbt--dbt-labs",
"dataPluginType" : "transformer",
"dataPluginLogoUrl" : "/assets/images/transformer/dbt.png",
"_embedded" : {
"dataplugin" : {
"id" : "0a83351b-4992-4cbe-aa0e-954115e7002d",
"pluginType" : "TRANSFORMER",
"name" : "dbt",
"namespace" : "dbt",
"variant" : "dbt-labs",
"label" : "dbt",
"description" : " Power your project transformations with dbt™, a SQL-first transformation tool that enables analytics engineers to develop transformations with code.\n\n***Version Control and CI/CD***\n\nUse Matatika to deploy and promote changes between dev, UAT, and production environments.\n\n***Test and Document***\n\nUse Matatika to develop and test every model prior to production release, and share dynamically generated documentation with all stakeholders.\n\n***Develop***\n\nWrite modular data transformations in .sql – Matatika together with dbt handles the chore of dependency management. ",
"logoUrl" : "/assets/images/transformer/dbt.png",
"hidden" : false,
"docs" : "https://www.matatika.com/data-details/dbt/",
"pipUrl" : "dbt-core~=1.7.0 dbt-postgres~=1.7.0 dbt-snowflake~=1.7.0 dbt-bigquery~=1.7.0 certifi==2025.1.31",
"repo" : "https://github.com/dbt-labs/dbt-core",
"capabilities" : [ ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "project_dir",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/transform",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "profiles_dir",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/transform/profile",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"env" : "DBT_PROFILES_DIR",
"protected" : false
}, {
"name" : "target",
"aliases" : [ ],
"value" : "$MELTANO_LOAD__DIALECT",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "source_schema",
"aliases" : [ ],
"value" : "$MELTANO_LOAD__TARGET_SCHEMA",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "target_schema",
"aliases" : [ ],
"value" : "analytics",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "target_path",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/.meltano/transformers/dbt/target",
"options" : [ ],
"kind" : "STRING",
"description" : "Output path for dbt generated artifacts",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "models",
"aliases" : [ ],
"value" : "$MELTANO_TRANSFORM__PACKAGE_NAME $MELTANO_EXTRACTOR_NAMESPACE my_meltano_project",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "secret_git_credential",
"aliases" : [ ],
"options" : [ ],
"kind" : "STRING",
"description" : "A convenient and simple way to supply a git credential for packages resolve by dbt:deps",
"hidden" : false,
"sensitive" : true,
"env" : "DBT_ENV_SECRET_GIT_CREDENTIAL",
"protected" : false
} ],
"variants" : [ ],
"commands" : {
"compile" : {
"args" : "compile",
"description" : "Generates executable SQL from source model, test, and analysis files. Compiled SQL files are written to the target/ directory."
},
"seed" : {
"args" : "seed",
"description" : "Load data from csv files into your data warehouse."
},
"test" : {
"args" : "test",
"description" : "Runs tests on data in deployed models."
},
"docs-generate" : {
"args" : "docs generate",
"description" : "Generate documentation artifacts for your project."
},
"deps" : {
"args" : "deps",
"description" : "Pull the most recent version of the dependencies listed in packages.yml"
},
"run" : {
"args" : "run",
"description" : "Compile SQL and execute against the current target database."
},
"clean" : {
"args" : "clean",
"description" : "Delete all folders in the clean-targets list (usually the dbt_modules and target directories.)"
},
"snapshot" : {
"args" : "snapshot",
"description" : "Execute snapshots defined in your project."
}
},
"matatikaHidden" : false,
"requires" : [ {
"id" : "e6c1ad3d-ebf5-4c4a-b129-f68156b47555",
"pluginType" : "FILE",
"name" : "files-dbt",
"namespace" : "dbt",
"variant" : "matatika",
"description" : " Files dbt is a file bundle that automatically configures your project to run transforms with dbt.\nThe bundle includes template project configuration:\n\n- transform/models (directory)\n- transform/profile/profiles.yml\n- transform/dbt_project.yml\n- transform/.gitignore\n- transform/macros/centralize_test_failures.sql\n",
"hidden" : false,
"pipUrl" : "git+https://github.com/Matatika/files-dbt@v1.3",
"repo" : "https://github.com/Matatika/files-dbt",
"capabilities" : [ ],
"select" : [ ],
"update" : {
"transform/profile/profiles.yml" : "true"
},
"vars" : { },
"settings" : [ ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : " Files dbt is a file bundle that automatically configures your project to run transforms with dbt.\nThe bundle includes template project configuration:\n\n- transform/models (directory)\n- transform/profile/profiles.yml\n- transform/dbt_project.yml\n- transform/.gitignore\n- transform/macros/centralize_test_failures.sql\n"
} ],
"fullDescription" : " Power your project transformations with dbt™, a SQL-first transformation tool that enables analytics engineers to develop transformations with code.\n\n***Version Control and CI/CD***\n\nUse Matatika to deploy and promote changes between dev, UAT, and production environments.\n\n***Test and Document***\n\nUse Matatika to develop and test every model prior to production release, and share dynamically generated documentation with all stakeholders.\n\n***Develop***\n\nWrite modular data transformations in .sql – Matatika together with dbt handles the chore of dependency management. \n\n## Settings\n\n\n### target_path\n\nOutput path for dbt generated artifacts\n\n### secret_git_credential\n\nA convenient and simple way to supply a git credential for packages resolve by dbt:deps",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d",
"type" : "DELETE"
}
}
}
},
"draft" : false,
"managed" : true,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
}
}
} ]
},
"_links" : {
"update pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006",
"type" : "PUT"
},
"delete pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006",
"type" : "DELETE"
},
"draft pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/draft",
"type" : "PUT"
},
"self" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006"
},
"environment" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/environment"
},
"jobs" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/jobs",
"type" : "GET"
},
"metrics" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/metrics"
},
"add subscription" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/subscriptions"
},
"verify pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/verification",
"type" : "POST"
},
"create job" : {
"href" : "https://app.matatika.com/api/pipelines/c2791eb3-7ea2-408f-b1a7-3fc3f3045006/jobs",
"type" : "POST"
}
}
}
Create or update a pipeline as a draft
PUT /api/workspaces/{workspace-id}/pipelines/{pipeline-id}/draft
Creates or updates the pipeline {pipeline-id} in the workspace {workspace-id} as a draft.
Prerequisites
- Workspace
{workspace-id}must exist
Body
Pipeline resource.
{
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599]",
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ]
}
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/draft' -i -X PUT \
-H 'Content-Type: application/json' \
-d '{
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599]",
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ]
}'
import requests
url = "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/draft"
data = {
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599]",
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ]
}
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("PUT", url, headers=headers, data=data)
print(response.text.encode('utf8'))
Response
200 OK / 201 Created
Pipeline with HAL links.
{
"id" : "b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"status" : "DRAFT",
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599]",
"name" : "sit-generated-pipeline-[2026-04-23t13:09:47.495074599]",
"timeout" : 0,
"maxRetries" : 0,
"created" : "2026-04-23T13:09:47.622971",
"lastModified" : "2026-04-23T13:09:47.622972",
"properties" : { },
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ],
"actions" : [ ],
"triggeredBy" : [ ],
"_embedded" : {
"dataComponents" : [ {
"id" : "e8c1225b-48e6-46f8-ad51-559ffba0b046",
"created" : "2026-04-23T13:09:47.138824",
"lastModified" : "2026-04-23T13:09:47.138826",
"name" : "tap-google-analytics",
"properties" : { },
"commands" : { },
"dataPlugin" : "extractors/tap-google-analytics--meltanolabs",
"dataPluginType" : "extractor",
"dataPluginLogoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"_embedded" : {
"dataplugin" : {
"id" : "55b21332-a082-4d7c-8f7f-b9f2032a0741",
"pluginType" : "EXTRACTOR",
"name" : "tap-google-analytics",
"namespace" : "tap_google_analytics",
"variant" : "meltanolabs",
"label" : "Google Analytics",
"description" : "Meltano Tap Google Analytics is a Singer tap for extracting Google Analytics 4 (GA4)\ndata into Meltano Cloud for reporting, modelling, and downstream analysis.\n\nIt helps you collect website and app performance data from Google Analytics in a\nrepeatable pipeline so you can analyse traffic, engagement, locations, devices,\npages, and revenue-related activity alongside data from your other business systems.\n\nUse this connector when you want to:\n\n- centralise Google Analytics data in your warehouse\n- build dashboards and reports on website performance\n- track traffic sources, user behaviour, and engagement trends over time\n- combine analytics data with advertising, CRM, sales, or product data\n- customise the extracted reports using your own stream definitions\n\n## Setup\n\nIn [Google Analytics](https://analytics.google.com/):\n1. Select the property you want to extract data for\n1. Go to \"Admin\" -> \"Property\" -> \"Property details\"\n1. Copy the \"PROPERTY ID\"\n\nIn Meltano Cloud:\n1. Login and connect with your Google account\n1. Enter the property ID\n1. Choose a start date for extraction\n\n## Streams\n\nThe tap provides the following default streams:\n\n### `website_overview`\n\nOverview of the website performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `traffic_sources`\n\nWhere website traffic originates from.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`source` | Dimension. The source that sent traffic, such as a website or referrer.\n`medium` | Dimension. The marketing medium for the traffic source, such as organic, referral, or cpc.\n`sourcePlatform` | Dimension. The platform associated with the traffic source.\n`activeUsers` | Metric. The number of active users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `locations`\n\nWebsite activity by country, region, and city.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`country` | Dimension. The country where the activity originated.\n`countryId` | Dimension. The Google Analytics identifier for the country.\n`region` | Dimension. The region or state where the activity originated.\n`city` | Dimension. The city where the activity originated.\n`cityId` | Dimension. The Google Analytics identifier for the city.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `four_weekly_active_users`\n\nActive users measured over a rolling 28 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active28DayUsers` | Metric. The number of active users over the last 28 days.\n\n### `weekly_active_users`\n\nActive users measured over a rolling 7 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active7DayUsers` | Metric. The number of active users over the last 7 days.\n\n### `daily_active_users`\n\nActive users measured over a rolling 1 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active1DayUsers` | Metric. The number of active users over the last 1 day.\n\n### `devices`\n\nWebsite activity by device, operating system, and browser.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`deviceCategory` | Dimension. The type of device used, such as desktop, tablet, or mobile.\n`deviceModel` | Dimension. The model of device used by the visitor.\n`operatingSystem` | Dimension. The operating system used by the visitor.\n`browser` | Dimension. The browser used by the visitor.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `transactions`\n\nRevenue and transaction performance overview.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`averageRevenuePerUser` | Metric. The average revenue generated per user.\n`newUsers` | Metric. The number of first-time users.\n`purchaseRevenue` | Metric. The revenue generated from purchases.\n`sessions` | Metric. The number of sessions recorded.\n`totalRevenue` | Metric. The total revenue attributed in the report.\n`transactions` | Metric. The number of completed transactions.\n\n### `pages`\n\nPage-level traffic and engagement performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`hostName` | Dimension. The hostname where the page was viewed.\n`pagePath` | Dimension. The path portion of the viewed page URL.\n`sessionMedium` | Dimension. The session-level marketing medium.\n`sessionSource` | Dimension. The session-level traffic source.\n`activeUsers` | Metric. The number of active users.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagedSessions` | Metric. The number of engaged sessions.\n`engagementRate` | Metric. The percentage of engaged sessions.\n`eventCount` | Metric. The total number of tracked events.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerUser` | Metric. The average number of page or screen views per user.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`userEngagementDuration` | Metric. The amount of time users were actively engaged.\n\n## Custom Streams\n\nThe tap also supports custom streams. When custom stream definitions are specified,\nthey override all default streams.",
"logoUrl" : "/assets/images/datasource/tap-google-analytics.svg",
"hidden" : false,
"pipUrl" : "git+https://github.com/MeltanoLabs/tap-google-analytics.git@v0.1.1",
"repo" : "https://github.com/MeltanoLabs/tap-google-analytics",
"capabilities" : [ "ABOUT", "STREAM_MAPS", "SCHEMA_FLATTENING", "CATALOG", "DISCOVER", "STATE" ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "oauth_credentials.authorization_url",
"aliases" : [ ],
"value" : "https://accounts.google.com/o/oauth2/v2/auth",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.scope",
"aliases" : [ ],
"value" : "https://www.googleapis.com/auth/analytics.readonly",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "oauth_credentials.access_token",
"aliases" : [ ],
"label" : "OAuth Credentials Access Token",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Access Token",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_token",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Token",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Token",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_proxy_url",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Proxy URL",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Proxy URL. If your refresh token needs to be refreshed through a proxy, you can provide the URL here.",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "oauth_credentials.refresh_proxy_url_auth",
"aliases" : [ ],
"label" : "OAuth Credentials Refresh Proxy URL Auth",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Refresh Proxy URL Auth. If your refresh token needs to be refreshed through a proxy, you can provide the URL here.",
"hidden" : true,
"sensitive" : true,
"protected" : false
}, {
"name" : "property_id",
"aliases" : [ ],
"label" : "Property ID",
"options" : [ ],
"kind" : "STRING",
"description" : "Google Analytics Property ID.\n\nTo find this in Google Analytics:\n\n1. Log in to the Analytics dashboard\n1. Select the property\n1. Go to \"Admin\"\n1. Under \"Property\", open \"Property details\"\n1. Copy the \"Property ID\"",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "start_date",
"aliases" : [ ],
"label" : "Start Date",
"options" : [ ],
"kind" : "DATE_ISO8601",
"description" : "The earliest record date to sync",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "reports",
"aliases" : [ ],
"label" : "Report definitions file",
"options" : [ ],
"placeholder" : "Ex. my_report_definition.json",
"kind" : "STRING",
"description" : "Google Analytics Reports Definition.\nThe tap uses the [default reports definition](https://github.com/MeltanoLabs/tap-google-analytics/blob/main/tap_google_analytics/defaults/default_report_definition.json)\nif this field is not provided.\nA project-relative path to JSON file with the definition of the reports to be generated.\n\nSee <https://ga-dev-tools.google/ga4/dimensions-metrics-explorer/> for valid dimensions and metrics.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n { \"name\" : \"name of stream to be used\",\n \"dimensions\" :\n [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\",\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\" :\n [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\",\n // ... up to 10 metrics per stream ...\n ]\n },\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, if you want to extract user stats per day in a `users_per_day` stream and session stats per day and country in a `sessions_per_country_day` stream:\n\n```json\n[\n { \"name\" : \"users_per_day\",\n \"dimensions\" :\n [\n \"date\"\n ],\n \"metrics\" :\n [\n \"newUsers\",\n \"active1DayUsers\"\n ]\n },\n { \"name\" : \"sessions_per_country_day\",\n \"dimensions\" :\n [\n \"date\",\n \"country\"\n ],\n \"metrics\" :\n [\n \"sessions\",\n \"sessionsPerUser\",\n \"avgSessionDuration\"\n ]\n }\n]\n```\n",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "reports_list",
"aliases" : [ ],
"label" : "Report definitions list",
"options" : [ ],
"kind" : "ARRAY",
"description" : "A list of report definitions to be generated directly in the config.\nEach object in the list defines a report/stream to extract, including the stream name,\nthe Google Analytics dimensions, and the metrics to request.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n {\n \"name\": \"name of stream to be used\",\n \"dimensions\": [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\"\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\": [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\"\n // ... up to 10 metrics per stream ...\n ]\n }\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, you can define multiple reports inline like this:\n\n```json\n[\n {\n \"name\": \"traffic_overview\",\n \"dimensions\": [\"date\", \"country\"],\n \"metrics\": [\"activeUsers\", \"sessions\"]\n },\n {\n \"name\": \"device_analysis\",\n \"dimensions\": [\"date\", \"deviceCategory\"],\n \"metrics\": [\"activeUsers\", \"engagedSessions\", \"engagementRate\"]\n },\n {\n \"name\": \"traffic_source_analysis\",\n \"dimensions\": [\"date\", \"sessionSource\", \"sessionMedium\"],\n \"metrics\": [\"activeUsers\", \"sessions\", \"eventCount\"]\n },\n {\n \"name\": \"top_pages\",\n \"dimensions\": [\"date\", \"pagePath\"],\n \"metrics\": [\"screenPageViews\", \"activeUsers\"]\n },\n {\n \"name\": \"engagement_report\",\n \"dimensions\": [\"date\"],\n \"metrics\": [\"engagedSessions\", \"engagementRate\", \"userEngagementDuration\"]\n }\n]\n```\n",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "end_date",
"aliases" : [ ],
"label" : "End Date",
"options" : [ ],
"kind" : "DATE_ISO8601",
"description" : "The last record date to sync",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flattening_enabled",
"aliases" : [ ],
"label" : "Flattening Enabled",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "'True' to enable schema flattening and automatically expand nested properties.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flattening_max_depth",
"aliases" : [ ],
"label" : "Flattening Max Depth",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The max depth to flatten schemas.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "stream_map_config",
"aliases" : [ ],
"label" : "Stream Map Config",
"options" : [ ],
"kind" : "OBJECT",
"description" : "User-defined config values to be used within map expressions.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "stream_maps",
"aliases" : [ ],
"label" : "Stream Maps",
"options" : [ ],
"kind" : "OBJECT",
"description" : "Config object for stream maps capability. For more information check out [Stream Maps](https://sdk.meltano.com/en/latest/stream_maps.html).",
"hidden" : false,
"sensitive" : false,
"protected" : false
} ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : "Meltano Tap Google Analytics is a Singer tap for extracting Google Analytics 4 (GA4)\ndata into Meltano Cloud for reporting, modelling, and downstream analysis.\n\nIt helps you collect website and app performance data from Google Analytics in a\nrepeatable pipeline so you can analyse traffic, engagement, locations, devices,\npages, and revenue-related activity alongside data from your other business systems.\n\nUse this connector when you want to:\n\n- centralise Google Analytics data in your warehouse\n- build dashboards and reports on website performance\n- track traffic sources, user behaviour, and engagement trends over time\n- combine analytics data with advertising, CRM, sales, or product data\n- customise the extracted reports using your own stream definitions\n\n## Setup\n\nIn [Google Analytics](https://analytics.google.com/):\n1. Select the property you want to extract data for\n1. Go to \"Admin\" -> \"Property\" -> \"Property details\"\n1. Copy the \"PROPERTY ID\"\n\nIn Meltano Cloud:\n1. Login and connect with your Google account\n1. Enter the property ID\n1. Choose a start date for extraction\n\n## Streams\n\nThe tap provides the following default streams:\n\n### `website_overview`\n\nOverview of the website performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `traffic_sources`\n\nWhere website traffic originates from.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`source` | Dimension. The source that sent traffic, such as a website or referrer.\n`medium` | Dimension. The marketing medium for the traffic source, such as organic, referral, or cpc.\n`sourcePlatform` | Dimension. The platform associated with the traffic source.\n`activeUsers` | Metric. The number of active users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `locations`\n\nWebsite activity by country, region, and city.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`country` | Dimension. The country where the activity originated.\n`countryId` | Dimension. The Google Analytics identifier for the country.\n`region` | Dimension. The region or state where the activity originated.\n`city` | Dimension. The city where the activity originated.\n`cityId` | Dimension. The Google Analytics identifier for the city.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `four_weekly_active_users`\n\nActive users measured over a rolling 28 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active28DayUsers` | Metric. The number of active users over the last 28 days.\n\n### `weekly_active_users`\n\nActive users measured over a rolling 7 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active7DayUsers` | Metric. The number of active users over the last 7 days.\n\n### `daily_active_users`\n\nActive users measured over a rolling 1 day period.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`active1DayUsers` | Metric. The number of active users over the last 1 day.\n\n### `devices`\n\nWebsite activity by device, operating system, and browser.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`deviceCategory` | Dimension. The type of device used, such as desktop, tablet, or mobile.\n`deviceModel` | Dimension. The model of device used by the visitor.\n`operatingSystem` | Dimension. The operating system used by the visitor.\n`browser` | Dimension. The browser used by the visitor.\n`activeUsers` | Metric. The number of active users.\n`newUsers` | Metric. The number of first-time users.\n`sessions` | Metric. The number of sessions recorded.\n`sessionsPerUser` | Metric. The average number of sessions per user.\n`averageSessionDuration` | Metric. The average duration of sessions.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagementRate` | Metric. The percentage of engaged sessions.\n\n### `transactions`\n\nRevenue and transaction performance overview.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`activeUsers` | Metric. The number of active users.\n`averageRevenuePerUser` | Metric. The average revenue generated per user.\n`newUsers` | Metric. The number of first-time users.\n`purchaseRevenue` | Metric. The revenue generated from purchases.\n`sessions` | Metric. The number of sessions recorded.\n`totalRevenue` | Metric. The total revenue attributed in the report.\n`transactions` | Metric. The number of completed transactions.\n\n### `pages`\n\nPage-level traffic and engagement performance.\n\n#### Properties\n\nName | Description\n--- | ---\n`date` | Dimension. The reporting date for the row.\n`hostName` | Dimension. The hostname where the page was viewed.\n`pagePath` | Dimension. The path portion of the viewed page URL.\n`sessionMedium` | Dimension. The session-level marketing medium.\n`sessionSource` | Dimension. The session-level traffic source.\n`activeUsers` | Metric. The number of active users.\n`bounceRate` | Metric. The percentage of sessions that were not engaged.\n`engagedSessions` | Metric. The number of engaged sessions.\n`engagementRate` | Metric. The percentage of engaged sessions.\n`eventCount` | Metric. The total number of tracked events.\n`screenPageViews` | Metric. The total number of page or screen views.\n`screenPageViewsPerUser` | Metric. The average number of page or screen views per user.\n`screenPageViewsPerSession` | Metric. The average number of page or screen views per session.\n`userEngagementDuration` | Metric. The amount of time users were actively engaged.\n\n## Custom Streams\n\nThe tap also supports custom streams. When custom stream definitions are specified,\nthey override all default streams.\n\n## Settings\n\n\n### Property ID\n\nGoogle Analytics Property ID.\n\nTo find this in Google Analytics:\n\n1. Log in to the Analytics dashboard\n1. Select the property\n1. Go to \"Admin\"\n1. Under \"Property\", open \"Property details\"\n1. Copy the \"Property ID\"\n\n### Start Date\n\nThe earliest record date to sync\n\n### Report definitions file\n\nGoogle Analytics Reports Definition.\nThe tap uses the [default reports definition](https://github.com/MeltanoLabs/tap-google-analytics/blob/main/tap_google_analytics/defaults/default_report_definition.json)\nif this field is not provided.\nA project-relative path to JSON file with the definition of the reports to be generated.\n\nSee <https://ga-dev-tools.google/ga4/dimensions-metrics-explorer/> for valid dimensions and metrics.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n { \"name\" : \"name of stream to be used\",\n \"dimensions\" :\n [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\",\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\" :\n [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\",\n // ... up to 10 metrics per stream ...\n ]\n },\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, if you want to extract user stats per day in a `users_per_day` stream and session stats per day and country in a `sessions_per_country_day` stream:\n\n```json\n[\n { \"name\" : \"users_per_day\",\n \"dimensions\" :\n [\n \"date\"\n ],\n \"metrics\" :\n [\n \"newUsers\",\n \"active1DayUsers\"\n ]\n },\n { \"name\" : \"sessions_per_country_day\",\n \"dimensions\" :\n [\n \"date\",\n \"country\"\n ],\n \"metrics\" :\n [\n \"sessions\",\n \"sessionsPerUser\",\n \"avgSessionDuration\"\n ]\n }\n]\n```\n\n\n### Report definitions list\n\nA list of report definitions to be generated directly in the config.\nEach object in the list defines a report/stream to extract, including the stream name,\nthe Google Analytics dimensions, and the metrics to request.\n\nThe JSON structure expected is as follows:\n\n```json\n[\n {\n \"name\": \"name of stream to be used\",\n \"dimensions\": [\n \"Google Analytics Dimension\",\n \"Another Google Analytics Dimension\"\n // ... up to 7 dimensions per stream ...\n ],\n \"metrics\": [\n \"Google Analytics Metric\",\n \"Another Google Analytics Metric\"\n // ... up to 10 metrics per stream ...\n ]\n }\n // ... as many streams / reports as the user wants ...\n]\n```\n\nFor example, you can define multiple reports inline like this:\n\n```json\n[\n {\n \"name\": \"traffic_overview\",\n \"dimensions\": [\"date\", \"country\"],\n \"metrics\": [\"activeUsers\", \"sessions\"]\n },\n {\n \"name\": \"device_analysis\",\n \"dimensions\": [\"date\", \"deviceCategory\"],\n \"metrics\": [\"activeUsers\", \"engagedSessions\", \"engagementRate\"]\n },\n {\n \"name\": \"traffic_source_analysis\",\n \"dimensions\": [\"date\", \"sessionSource\", \"sessionMedium\"],\n \"metrics\": [\"activeUsers\", \"sessions\", \"eventCount\"]\n },\n {\n \"name\": \"top_pages\",\n \"dimensions\": [\"date\", \"pagePath\"],\n \"metrics\": [\"screenPageViews\", \"activeUsers\"]\n },\n {\n \"name\": \"engagement_report\",\n \"dimensions\": [\"date\"],\n \"metrics\": [\"engagedSessions\", \"engagementRate\", \"userEngagementDuration\"]\n }\n]\n```\n\n\n### End Date\n\nThe last record date to sync\n\n### Flattening Enabled\n\n'True' to enable schema flattening and automatically expand nested properties.\n\n### Flattening Max Depth\n\nThe max depth to flatten schemas.\n\n### Stream Map Config\n\nUser-defined config values to be used within map expressions.\n\n### Stream Maps\n\nConfig object for stream maps capability. For more information check out [Stream Maps](https://sdk.meltano.com/en/latest/stream_maps.html).",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/55b21332-a082-4d7c-8f7f-b9f2032a0741",
"type" : "DELETE"
}
}
}
},
"draft" : true,
"managed" : false,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/e8c1225b-48e6-46f8-ad51-559ffba0b046"
}
}
}, {
"id" : "ef91b260-3416-4405-8fe7-c1887f7992ea",
"created" : "2026-04-23T13:09:41.664014",
"lastModified" : "2026-04-23T13:09:41.664014",
"name" : "Warehouse",
"properties" : {
"password" : "0K89mftB_BXs2mr0s_t918yYTe",
"default_target_schema" : "analytics",
"dbname" : "rhklhef",
"port" : "5432",
"host" : "sharp-banana2.postgres.database.azure.com",
"user" : "rhklhef"
},
"commands" : { },
"dataPlugin" : "loaders/target-postgres--matatika",
"dataPluginType" : "loader",
"dataPluginLogoUrl" : "/assets/logos/loaders/postgres.png",
"_embedded" : {
"dataplugin" : {
"id" : "215e1d33-1e0e-4600-8e14-20148fab4269",
"pluginType" : "LOADER",
"name" : "target-postgres",
"namespace" : "postgres_transferwise",
"variant" : "matatika",
"label" : "Postgres Warehouse",
"description" : "Postgres Warehouse is a data warehousing solution built on top of the Postgres database management system.\n\nPostgres Warehouse is designed to handle large volumes of data and complex queries, making it an ideal solution for businesses that need to store and analyze large amounts of data. It provides a number of features that are specifically tailored to data warehousing, such as columnar storage, parallel processing, and support for advanced analytics. Additionally, Postgres Warehouse is highly scalable, allowing businesses to easily add more resources as their data needs grow. Overall, Postgres Warehouse is a powerful and flexible data warehousing solution that can help businesses make better decisions by providing them with the insights they need to succeed.\n### Prerequisites\nThe process of obtaining the required settings for connecting to a Postgres Warehouse may vary depending on the specific setup and configuration of the database. However, here are some general ways to obtain each of the required settings:\n\n- User: The user is typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the username.\n- Password: The password is also typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the password.\n- Host: The host is the server where the database is located. You can ask the database administrator or check the database documentation to find out the host name or IP address.\n- Port: The port is the number that the database listens on for incoming connections. The default port for Postgres is 5432, but it may be different depending on the configuration. You can ask the database administrator or check the database documentation to find out the port number.\n- Database Name: The database name is the name of the specific database you want to connect to. You can ask the database administrator or check the database documentation to find out the database name.\n- Default Target Schema: The default target schema is the schema that you want to use as the default when connecting to the database. This may be set up by the database administrator or you may need to create it yourself. You can ask the database administrator or check the database documentation to find out the default target schema.",
"logoUrl" : "/assets/logos/loaders/postgres.png",
"hidden" : false,
"docs" : "https://www.matatika.com/data-details/target-postgres/",
"pipUrl" : "git+https://github.com/Matatika/pipelinewise-target-postgres.git@v0.2.1",
"repo" : "https://github.com/Matatika/pipelinewise-target-postgres",
"capabilities" : [ ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "user",
"aliases" : [ "username" ],
"label" : "User",
"options" : [ ],
"kind" : "STRING",
"description" : "The username used to connect to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "password",
"aliases" : [ ],
"label" : "Password",
"options" : [ ],
"kind" : "STRING",
"description" : "The password used to authenticate the user.",
"hidden" : false,
"sensitive" : true,
"required" : "true",
"protected" : false
}, {
"name" : "host",
"aliases" : [ "address" ],
"label" : "Host",
"options" : [ ],
"kind" : "STRING",
"description" : "The hostname or IP address of the Postgres Warehouse server.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "port",
"aliases" : [ ],
"label" : "Port",
"value" : "5432",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The port number used to connect to the Postgres Warehouse server.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "dbname",
"aliases" : [ "database" ],
"label" : "Database Name",
"options" : [ ],
"kind" : "STRING",
"description" : "The name of the database to connect to.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "default_target_schema",
"aliases" : [ ],
"label" : "Default Target Schema",
"value" : "analytics",
"options" : [ ],
"kind" : "STRING",
"description" : "The default schema to use when writing data to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "state_schema",
"aliases" : [ ],
"label" : "State Schema",
"value" : "public",
"options" : [ ],
"kind" : "STRING",
"description" : "The default schema to use when writing Meltano state.",
"hidden" : false,
"sensitive" : false,
"required" : "true",
"protected" : false
}, {
"name" : "ssl",
"aliases" : [ ],
"label" : "SSL",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to use SSL encryption when connecting to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false,
"value_post_processor" : "STRINGIFY"
}, {
"name" : "batch_size_rows",
"aliases" : [ ],
"label" : "Batch Size Rows",
"value" : "100000",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The number of rows to write to the Postgres Warehouse in each batch.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "underscore_camel_case_fields",
"aliases" : [ ],
"label" : "Underscore Camel Case Fields",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to convert field names from camel case to underscore-separated format.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "flush_all_streams",
"aliases" : [ ],
"label" : "Flush All Streams",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to flush all streams to the Postgres Warehouse before closing the connection.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "parallelism",
"aliases" : [ ],
"label" : "Parallelism",
"value" : "-1",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The number of threads to use when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "parallelism_max",
"aliases" : [ ],
"label" : "Max Parallelism",
"value" : "16",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The maximum number of threads to use when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "default_target_schema_select_permission",
"aliases" : [ ],
"label" : "Default Target Schema Select Permission",
"options" : [ ],
"kind" : "STRING",
"description" : "The permission level required to select data from the default target schema.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "schema_mapping",
"aliases" : [ ],
"label" : "Schema Mapping",
"options" : [ ],
"kind" : "STRING",
"description" : "A mapping of source schema names to target schema names.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "add_metadata_columns",
"aliases" : [ ],
"label" : "Add Metadata Columns",
"value" : "true",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to add metadata columns to the target table.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "hard_delete",
"aliases" : [ ],
"label" : "Hard Delete",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to perform hard deletes when deleting data from the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "data_flattening_max_level",
"aliases" : [ ],
"label" : "Data Flattening Max Level",
"value" : "10",
"options" : [ ],
"kind" : "INTEGER",
"description" : "The maximum level of nested data structures to flatten when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "primary_key_required",
"aliases" : [ ],
"label" : "Primary Key Required",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not a primary key is required for the target table.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "validate_records",
"aliases" : [ ],
"label" : "Validate Records",
"value" : "false",
"options" : [ ],
"kind" : "BOOLEAN",
"description" : "Whether or not to validate records before writing them to the Postgres Warehouse.",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "temp_dir",
"aliases" : [ ],
"label" : "Temporary Directory",
"options" : [ ],
"kind" : "STRING",
"description" : "The directory to use for temporary files when writing data to the Postgres Warehouse.",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.host",
"aliases" : [ ],
"label" : "SSH Tunnel Host",
"options" : [ ],
"kind" : "STRING",
"description" : "Host of the bastion host, this is the host we'll connect to via ssh",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.port",
"aliases" : [ ],
"label" : "SSH Tunnel Port",
"value" : "22",
"options" : [ ],
"kind" : "INTEGER",
"description" : "Port to connect to bastion host",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.private_key",
"aliases" : [ ],
"label" : "SSH Tunnel Private Key",
"options" : [ ],
"kind" : "PASSWORD",
"description" : "A base64 encoded Private Key for authentication to the bastion host w/ key pair auth",
"hidden" : false,
"sensitive" : true,
"encoding" : "BASE64",
"protected" : false
}, {
"name" : "ssh_tunnel.private_key_password",
"aliases" : [ ],
"label" : "SSH Tunnel Private Key Password",
"options" : [ ],
"kind" : "PASSWORD",
"description" : "Private Key Password, leave None if no password is set",
"hidden" : false,
"sensitive" : true,
"protected" : false
}, {
"name" : "ssh_tunnel.username",
"aliases" : [ ],
"label" : "SSH Tunnel Username",
"options" : [ ],
"kind" : "STRING",
"description" : "Username to connect to bastion host",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.password",
"aliases" : [ ],
"label" : "SSH Tunnel Password",
"options" : [ ],
"kind" : "STRING",
"description" : "Password to connect to bastion host w/ basic auth",
"hidden" : false,
"sensitive" : true,
"protected" : false
}, {
"name" : "ssh_tunnel.host_setting_name",
"aliases" : [ ],
"value" : "host",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
}, {
"name" : "ssh_tunnel.port_setting_name",
"aliases" : [ ],
"value" : "port",
"options" : [ ],
"kind" : "STRING",
"hidden" : true,
"sensitive" : false,
"protected" : false
} ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : "Postgres Warehouse is a data warehousing solution built on top of the Postgres database management system.\n\nPostgres Warehouse is designed to handle large volumes of data and complex queries, making it an ideal solution for businesses that need to store and analyze large amounts of data. It provides a number of features that are specifically tailored to data warehousing, such as columnar storage, parallel processing, and support for advanced analytics. Additionally, Postgres Warehouse is highly scalable, allowing businesses to easily add more resources as their data needs grow. Overall, Postgres Warehouse is a powerful and flexible data warehousing solution that can help businesses make better decisions by providing them with the insights they need to succeed.\n### Prerequisites\nThe process of obtaining the required settings for connecting to a Postgres Warehouse may vary depending on the specific setup and configuration of the database. However, here are some general ways to obtain each of the required settings:\n\n- User: The user is typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the username.\n- Password: The password is also typically created when the database is set up. You can ask the database administrator or check the database documentation to find out the password.\n- Host: The host is the server where the database is located. You can ask the database administrator or check the database documentation to find out the host name or IP address.\n- Port: The port is the number that the database listens on for incoming connections. The default port for Postgres is 5432, but it may be different depending on the configuration. You can ask the database administrator or check the database documentation to find out the port number.\n- Database Name: The database name is the name of the specific database you want to connect to. You can ask the database administrator or check the database documentation to find out the database name.\n- Default Target Schema: The default target schema is the schema that you want to use as the default when connecting to the database. This may be set up by the database administrator or you may need to create it yourself. You can ask the database administrator or check the database documentation to find out the default target schema.\n\n## Settings\n\n\n### User\n\nThe username used to connect to the Postgres Warehouse.\n\n### Password\n\nThe password used to authenticate the user.\n\n### Host\n\nThe hostname or IP address of the Postgres Warehouse server.\n\n### Port\n\nThe port number used to connect to the Postgres Warehouse server.\n\n### Database Name\n\nThe name of the database to connect to.\n\n### Default Target Schema\n\nThe default schema to use when writing data to the Postgres Warehouse.\n\n### State Schema\n\nThe default schema to use when writing Meltano state.\n\n### Batch Size Rows\n\nThe number of rows to write to the Postgres Warehouse in each batch.\n\n### Underscore Camel Case Fields\n\nWhether or not to convert field names from camel case to underscore-separated format.\n\n### Primary Key Required\n\nWhether or not a primary key is required for the target table.\n\n### Validate Records\n\nWhether or not to validate records before writing them to the Postgres Warehouse.\n\n### SSH Tunnel Host\n\nHost of the bastion host, this is the host we'll connect to via ssh\n\n### SSH Tunnel Port\n\nPort to connect to bastion host\n\n### SSH Tunnel Private Key\n\nA base64 encoded Private Key for authentication to the bastion host w/ key pair auth\n\n### SSH Tunnel Private Key Password\n\nPrivate Key Password, leave None if no password is set\n\n### SSH Tunnel Username\n\nUsername to connect to bastion host\n\n### SSH Tunnel Password\n\nPassword to connect to bastion host w/ basic auth",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/215e1d33-1e0e-4600-8e14-20148fab4269",
"type" : "DELETE"
}
}
}
},
"draft" : false,
"managed" : true,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/ef91b260-3416-4405-8fe7-c1887f7992ea"
}
}
}, {
"id" : "b4f232d4-29c3-4646-b4c6-f54850843c44",
"created" : "2026-04-23T13:09:41.746029",
"lastModified" : "2026-04-23T13:09:41.74603",
"name" : "dbt",
"properties" : { },
"commands" : {
"compile" : {
"args" : "compile",
"description" : "Generates executable SQL from source model, test, and analysis files. Compiled SQL files are written to the target/ directory."
},
"seed" : {
"args" : "seed",
"description" : "Load data from csv files into your data warehouse."
},
"test" : {
"args" : "test",
"description" : "Runs tests on data in deployed models."
},
"docs-generate" : {
"args" : "docs generate",
"description" : "Generate documentation artifacts for your project."
},
"deps" : {
"args" : "deps",
"description" : "Pull the most recent version of the dependencies listed in packages.yml"
},
"run" : {
"args" : "run",
"description" : "Compile SQL and execute against the current target database."
},
"clean" : {
"args" : "clean",
"description" : "Delete all folders in the clean-targets list (usually the dbt_modules and target directories.)"
},
"snapshot" : {
"args" : "snapshot",
"description" : "Execute snapshots defined in your project."
}
},
"dataPlugin" : "transformers/dbt--dbt-labs",
"dataPluginType" : "transformer",
"dataPluginLogoUrl" : "/assets/images/transformer/dbt.png",
"_embedded" : {
"dataplugin" : {
"id" : "0a83351b-4992-4cbe-aa0e-954115e7002d",
"pluginType" : "TRANSFORMER",
"name" : "dbt",
"namespace" : "dbt",
"variant" : "dbt-labs",
"label" : "dbt",
"description" : " Power your project transformations with dbt™, a SQL-first transformation tool that enables analytics engineers to develop transformations with code.\n\n***Version Control and CI/CD***\n\nUse Matatika to deploy and promote changes between dev, UAT, and production environments.\n\n***Test and Document***\n\nUse Matatika to develop and test every model prior to production release, and share dynamically generated documentation with all stakeholders.\n\n***Develop***\n\nWrite modular data transformations in .sql – Matatika together with dbt handles the chore of dependency management. ",
"logoUrl" : "/assets/images/transformer/dbt.png",
"hidden" : false,
"docs" : "https://www.matatika.com/data-details/dbt/",
"pipUrl" : "dbt-core~=1.7.0 dbt-postgres~=1.7.0 dbt-snowflake~=1.7.0 dbt-bigquery~=1.7.0 certifi==2025.1.31",
"repo" : "https://github.com/dbt-labs/dbt-core",
"capabilities" : [ ],
"select" : [ ],
"update" : { },
"vars" : { },
"settings" : [ {
"name" : "project_dir",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/transform",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "profiles_dir",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/transform/profile",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"env" : "DBT_PROFILES_DIR",
"protected" : false
}, {
"name" : "target",
"aliases" : [ ],
"value" : "$MELTANO_LOAD__DIALECT",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "source_schema",
"aliases" : [ ],
"value" : "$MELTANO_LOAD__TARGET_SCHEMA",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "target_schema",
"aliases" : [ ],
"value" : "analytics",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "target_path",
"aliases" : [ ],
"value" : "$MELTANO_PROJECT_ROOT/.meltano/transformers/dbt/target",
"options" : [ ],
"kind" : "STRING",
"description" : "Output path for dbt generated artifacts",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "models",
"aliases" : [ ],
"value" : "$MELTANO_TRANSFORM__PACKAGE_NAME $MELTANO_EXTRACTOR_NAMESPACE my_meltano_project",
"options" : [ ],
"kind" : "STRING",
"hidden" : false,
"sensitive" : false,
"protected" : false
}, {
"name" : "secret_git_credential",
"aliases" : [ ],
"options" : [ ],
"kind" : "STRING",
"description" : "A convenient and simple way to supply a git credential for packages resolve by dbt:deps",
"hidden" : false,
"sensitive" : true,
"env" : "DBT_ENV_SECRET_GIT_CREDENTIAL",
"protected" : false
} ],
"variants" : [ ],
"commands" : {
"compile" : {
"args" : "compile",
"description" : "Generates executable SQL from source model, test, and analysis files. Compiled SQL files are written to the target/ directory."
},
"seed" : {
"args" : "seed",
"description" : "Load data from csv files into your data warehouse."
},
"test" : {
"args" : "test",
"description" : "Runs tests on data in deployed models."
},
"docs-generate" : {
"args" : "docs generate",
"description" : "Generate documentation artifacts for your project."
},
"deps" : {
"args" : "deps",
"description" : "Pull the most recent version of the dependencies listed in packages.yml"
},
"run" : {
"args" : "run",
"description" : "Compile SQL and execute against the current target database."
},
"clean" : {
"args" : "clean",
"description" : "Delete all folders in the clean-targets list (usually the dbt_modules and target directories.)"
},
"snapshot" : {
"args" : "snapshot",
"description" : "Execute snapshots defined in your project."
}
},
"matatikaHidden" : false,
"requires" : [ {
"id" : "e6c1ad3d-ebf5-4c4a-b129-f68156b47555",
"pluginType" : "FILE",
"name" : "files-dbt",
"namespace" : "dbt",
"variant" : "matatika",
"description" : " Files dbt is a file bundle that automatically configures your project to run transforms with dbt.\nThe bundle includes template project configuration:\n\n- transform/models (directory)\n- transform/profile/profiles.yml\n- transform/dbt_project.yml\n- transform/.gitignore\n- transform/macros/centralize_test_failures.sql\n",
"hidden" : false,
"pipUrl" : "git+https://github.com/Matatika/files-dbt@v1.3",
"repo" : "https://github.com/Matatika/files-dbt",
"capabilities" : [ ],
"select" : [ ],
"update" : {
"transform/profile/profiles.yml" : "true"
},
"vars" : { },
"settings" : [ ],
"variants" : [ ],
"commands" : { },
"matatikaHidden" : false,
"requires" : [ ],
"fullDescription" : " Files dbt is a file bundle that automatically configures your project to run transforms with dbt.\nThe bundle includes template project configuration:\n\n- transform/models (directory)\n- transform/profile/profiles.yml\n- transform/dbt_project.yml\n- transform/.gitignore\n- transform/macros/centralize_test_failures.sql\n"
} ],
"fullDescription" : " Power your project transformations with dbt™, a SQL-first transformation tool that enables analytics engineers to develop transformations with code.\n\n***Version Control and CI/CD***\n\nUse Matatika to deploy and promote changes between dev, UAT, and production environments.\n\n***Test and Document***\n\nUse Matatika to develop and test every model prior to production release, and share dynamically generated documentation with all stakeholders.\n\n***Develop***\n\nWrite modular data transformations in .sql – Matatika together with dbt handles the chore of dependency management. \n\n## Settings\n\n\n### target_path\n\nOutput path for dbt generated artifacts\n\n### secret_git_credential\n\nA convenient and simple way to supply a git credential for packages resolve by dbt:deps",
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d"
},
"update dataplugin" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d",
"type" : "PUT"
},
"delete dataplugin" : {
"href" : "https://app.matatika.com/api/dataplugins/0a83351b-4992-4cbe-aa0e-954115e7002d",
"type" : "DELETE"
}
}
}
},
"draft" : false,
"managed" : true,
"_links" : {
"self" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
},
"update datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
},
"delete datacomponent" : {
"href" : "https://app.matatika.com/api/datacomponents/b4f232d4-29c3-4646-b4c6-f54850843c44"
}
}
} ]
},
"_links" : {
"update pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"type" : "PUT"
},
"delete pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5",
"type" : "DELETE"
},
"draft pipeline" : {
"href" : "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/draft",
"type" : "PUT"
},
"self" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5"
},
"environment" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/environment"
},
"jobs" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/jobs",
"type" : "GET"
},
"metrics" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/metrics"
},
"add subscription" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/subscriptions"
},
"verify pipeline" : {
"href" : "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5/verification",
"type" : "POST"
}
}
}
Validate a pipeline configuration in a workspace
POST /api/workspaces/{workspace-id}/pipelines/validation
Validates a pipeline configuration in the workspace {workspace-id}.
Prerequisites
- Workspace
{workspace-id}must exist
Body
Pipeline resource.
{
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599] (updated)",
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ]
}
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/validation' -i -X POST \
-H 'Content-Type: application/json' \
-d '{
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599] (updated)",
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ]
}'
import requests
url = "https://app.matatika.com/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/validation"
data = {
"label" : "SIT-generated pipeline [2026-04-23T13:09:47.495074599] (updated)",
"dataComponents" : [ "tap-google-analytics", "Warehouse", "dbt" ]
}
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("POST", url, headers=headers, data=data)
print(response.text.encode('utf8'))
Response
200 OK
No response body provided.
400 Bad Request
Pipeline property validation errors.
{
"timestamp" : "2026-04-23T13:09:49.214133256",
"status" : 400,
"error" : "Bad Request",
"message" : "2 validation errors from 'resource'",
"errors" : [ {
"codes" : [ "NotBlank.property_id", "NotBlank" ],
"defaultMessage" : "No value given for setting",
"objectName" : "resource",
"field" : "properties.tap-google-analytics.property_id",
"bindingFailure" : true,
"code" : "NotBlank"
}, {
"codes" : [ "NotBlank.start_date", "NotBlank" ],
"defaultMessage" : "No value given for setting",
"objectName" : "resource",
"field" : "properties.tap-google-analytics.start_date",
"bindingFailure" : true,
"code" : "NotBlank"
} ],
"path" : "/api/workspaces/c0362fd8-af41-4099-aed7-99f5daa3d387/pipelines/validation"
}
Verify a pipeline
POST /api/pipelines/{pipeline-id}/verification
Verifies the configuration of the pipeline {pipeline-id}.
Prerequisites
- Pipeline
{pipeline-id}must exist
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/pipelines/a6006410-e5b5-465b-838a-d8ca2132da47/verification' -i -X POST \
-H 'Content-Type: application/json'
import requests
url = "https://app.matatika.com/api/pipelines/a6006410-e5b5-465b-838a-d8ca2132da47/verification"
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("POST", url, headers=headers)
print(response.text.encode('utf8'))
Response
200 OK
Job with HAL links.
Delete a pipeline
DELETE /api/pipelines/{pipeline-id}
Deletes the pipeline {pipeline-id}.
Prerequisites
- Pipeline
{pipeline-id}must exist
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5' -i -X DELETE
import requests
url = "https://app.matatika.com/api/pipelines/b0ee09dc-8ee7-45fe-aa17-89391c94d5a5"
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("DELETE", url, headers=headers)
print(response.text.encode('utf8'))
Response
204 No Content
No response body provided.
View pipeline metrics
GET /api/pipelines/{pipeline-id}/metrics
Returns the pipeline metrics for each job of {pipeline-id}.
Prerequisites
- Pipeline
{pipeline-id}must exist
Examples
- cURL
- Python (requests)
curl -H "Authorization: Bearer $ACCESS_TOKEN" 'https://app.matatika.com/api/pipelines/a6006410-e5b5-465b-838a-d8ca2132da47/metrics' -i -X GET
import requests
url = "https://app.matatika.com/api/pipelines/a6006410-e5b5-465b-838a-d8ca2132da47/metrics"
headers = {
'Authorization': ACCESS_TOKEN
}
response = requests.request("GET", url, headers=headers)
print(response.text.encode('utf8'))
Response
200: The dataset data (defaults to JSON format).
[ {
"metrics.job-created" : "2026-04-23 13:12:40",
"metrics.value" : 0.0
}, {
"metrics.job-created" : "2026-04-23 13:13:43",
"metrics.value" : 231.0
} ]
204: No response body, metrics not enabled.