{
  "ab_internal": {
    "isEnterprise": false,
    "ql": 400,
    "requireVersionIncrementsInPullRequests": true,
    "sl": 300
  },
  "allowedHosts": {
    "hosts": [
      "*.salesforce.com"
    ]
  },
  "connectorBuildOptions": {
    "baseImage": "docker.io/airbyte/python-connector-base:4.0.2@sha256:9fdb1888c4264cf6fee473649ecb593f56f58e5d0096a87ee0b231777e2e3e73"
  },
  "connectorTestSuitesOptions": [
    {
      "suite": "liveTests",
      "testConnections": [
        {
          "id": "114d8a58-804d-49cd-be0f-14d8f20012b6",
          "name": "salesforce_config_bulk_dev_null"
        },
        {
          "id": "36b229e8-cea8-4d92-8b3d-cdfe488b00a5",
          "name": "salesforce_config_dev_null"
        },
        {
          "id": "4cfaad00-8911-450e-a8f0-d31c6acd2fe2",
          "name": "salesforce_config_sandbox_dev_null"
        }
      ]
    },
    {
      "suite": "unitTests"
    },
    {
      "suite": "integrationTests",
      "testSecrets": [
        {
          "fileName": "config_bulk.json",
          "name": "SECRET_SOURCE-SALESFORCE_BULK_CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        },
        {
          "fileName": "config.json",
          "name": "SECRET_SOURCE-SALESFORCE_REST_CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        },
        {
          "fileName": "config_sandbox.json",
          "name": "SECRET_SOURCE-SALESFORCE_SANDBOX_CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        }
      ]
    },
    {
      "suite": "acceptanceTests",
      "testSecrets": [
        {
          "fileName": "config_bulk.json",
          "name": "SECRET_SOURCE-SALESFORCE_BULK_CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        },
        {
          "fileName": "config.json",
          "name": "SECRET_SOURCE-SALESFORCE_REST_CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        },
        {
          "fileName": "config_sandbox.json",
          "name": "SECRET_SOURCE-SALESFORCE_SANDBOX_CREDS",
          "secretStore": {
            "alias": "airbyte-connector-testing-secret-store",
            "type": "GSM"
          }
        }
      ]
    }
  ],
  "custom": false,
  "dockerImageTag": "2.8.2-preview.b2891dc",
  "dockerRepository": "airbyte/source-salesforce",
  "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce",
  "externalDocumentationUrls": [
    {
      "title": "REST API Release Notes",
      "type": "api_release_history",
      "url": "https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/rest_rns.htm"
    },
    {
      "title": "Winter 2026 release notes - API",
      "type": "api_release_history",
      "url": "https://help.salesforce.com/s/articleView?id=release-notes.salesforce_release_notes.htm&release=258&type=5"
    }
  ],
  "generated": {
    "git": {
      "commit_author": "James Truty",
      "commit_author_email": "jtruty@gmail.com",
      "commit_sha": "bb1862e9079d41fbc6db61e0aab1fb9028f7eac2",
      "commit_timestamp": "2026-08-12T11:10:30-05:00"
    },
    "sbomUrl": "https://connectors.airbyte.com/files/sbom/airbyte/source-salesforce/2.8.2-preview.b2891dc.spdx.json",
    "source_file_info": {
      "metadata_bucket_name": "prod-airbyte-cloud-connector-metadata-service",
      "metadata_file_path": "metadata/airbyte/source-salesforce/2.8.2-preview.b2891dc/metadata.yaml",
      "metadata_last_modified": "2026-08-13T11:48:47.795078+00:00",
      "registry_entry_generated_at": "2026-08-13T11:48:47.795078+00:00"
    }
  },
  "githubIssueLabel": "source-salesforce",
  "icon": "salesforce.svg",
  "iconUrl": "https://connectors.airbyte.com/files/metadata/airbyte/source-salesforce/latest/icon.svg",
  "language": "python",
  "license": "ELv2",
  "maxSecondsBetweenMessages": 86400,
  "name": "Salesforce",
  "packageInfo": {
    "cdk_version": "python:7.23.5"
  },
  "public": true,
  "releaseStage": "generally_available",
  "releases": {
    "rolloutConfiguration": {
      "advanceDelayMinutes": 10,
      "autopilotConfig": {
        "autoPromoteStages": true,
        "autoStart": true,
        "strategy": "slow"
      },
      "defaultRolloutMode": "autopilot",
      "enableProgressiveRollout": false,
      "initialPercentage": 0,
      "maxPercentage": 50
    }
  },
  "remoteRegistries": {
    "pypi": {
      "enabled": true,
      "packageName": "airbyte-source-salesforce"
    }
  },
  "sourceDefinitionId": "b117307c-14b6-41aa-9422-947e34922962",
  "sourceType": "api",
  "spec": {
    "advanced_auth": {
      "auth_flow_type": "oauth2.0",
      "oauth_config_specification": {
        "complete_oauth_output_specification": {
          "additionalProperties": false,
          "properties": {
            "refresh_token": {
              "path_in_connector_config": [
                "refresh_token"
              ],
              "type": "string"
            }
          },
          "type": "object"
        },
        "complete_oauth_server_input_specification": {
          "additionalProperties": false,
          "properties": {
            "client_id": {
              "type": "string"
            },
            "client_secret": {
              "type": "string"
            }
          },
          "type": "object"
        },
        "complete_oauth_server_output_specification": {
          "additionalProperties": false,
          "properties": {
            "client_id": {
              "path_in_connector_config": [
                "client_id"
              ],
              "type": "string"
            },
            "client_secret": {
              "path_in_connector_config": [
                "client_secret"
              ],
              "type": "string"
            }
          },
          "type": "object"
        },
        "oauth_connector_input_specification": {
          "access_token_headers": {
            "Content-Type": "application/x-www-form-urlencoded"
          },
          "access_token_params": {
            "client_id": "{{ client_id_value }}",
            "client_secret": "{{ client_secret_value }}",
            "code": "{{ auth_code_value }}",
            "grant_type": "authorization_code",
            "redirect_uri": "{{ redirect_uri_value }}"
          },
          "access_token_url": "https://{% if is_sandbox %}test{% else %}login{% endif %}.salesforce.com/services/oauth2/token",
          "consent_url": "https://{% if is_sandbox %}test{% else %}login{% endif %}.salesforce.com/services/oauth2/authorize?{{client_id_param}}&{{redirect_uri_param}}&response_type=code&{{scopes_param}}&{{state_param}}",
          "extract_output": [
            "refresh_token"
          ],
          "scopes": [
            {
              "scope": "api"
            },
            {
              "scope": "web"
            },
            {
              "scope": "refresh_token"
            },
            {
              "scope": "lightning"
            }
          ]
        },
        "oauth_user_input_from_connector_config_specification": {
          "additionalProperties": false,
          "properties": {
            "is_sandbox": {
              "path_in_connector_config": [
                "is_sandbox"
              ],
              "type": "boolean"
            }
          },
          "type": "object"
        }
      },
      "predicate_key": [
        "auth_type"
      ],
      "predicate_value": "Client"
    },
    "connectionSpecification": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": true,
      "properties": {
        "auth_type": {
          "const": "Client",
          "type": "string"
        },
        "client_id": {
          "description": "Enter your Salesforce developer application's <a href=\"https://developer.salesforce.com/forums/?id=9062I000000DLgbQAG\">Client ID</a>",
          "order": 2,
          "title": "Client ID",
          "type": "string"
        },
        "client_secret": {
          "airbyte_secret": true,
          "description": "Enter your Salesforce developer application's <a href=\"https://developer.salesforce.com/forums/?id=9062I000000DLgbQAG\">Client secret</a>",
          "order": 3,
          "title": "Client Secret",
          "type": "string"
        },
        "force_use_bulk_api": {
          "default": false,
          "description": "Toggle to use Bulk API (this might cause empty fields for some streams)",
          "order": 6,
          "title": "Force to use BULK API",
          "type": "boolean"
        },
        "is_sandbox": {
          "default": false,
          "description": "Toggle if you're using a <a href=\"https://help.salesforce.com/s/articleView?id=sf.deploy_sandboxes_parent.htm&type=5\">Salesforce Sandbox</a>",
          "order": 1,
          "title": "Sandbox",
          "type": "boolean"
        },
        "lookback_window": {
          "default": "PT10M",
          "description": "The duration (ISO8601 duration) to re-read data from the source when running incremental syncs. This compensates for records that may not be immediately available when querying the Salesforce API due to eventual consistency delays. The connector will re-query this amount of time before the last cursor position on each sync. Increase this value if you observe missing records in your destination. See <a href=\"https://docs.airbyte.com/integrations/sources/salesforce#limitations--troubleshooting\">Limitations & Troubleshooting</a> for details.",
          "examples": [
            "PT10M",
            "PT30M",
            "PT1H"
          ],
          "order": 8,
          "title": "Lookback Window for Incremental sync",
          "type": "string"
        },
        "preserve_na_values": {
          "default": false,
          "description": "By default, string values such as \"NA\", \"N/A\", \"NULL\", \"None\" and \"NaN\" returned by the Salesforce Bulk API are treated as missing and synced as null. Enable this option to keep these values as literal strings (for example, \"NA\" meaning \"North America\"). Empty fields are still synced as null. Leaving this disabled preserves the connector's historical behavior.",
          "order": 10,
          "title": "Preserve \"NA\" and similar string values",
          "type": "boolean"
        },
        "refresh_token": {
          "airbyte_secret": true,
          "description": "Enter your application's <a href=\"https://developer.salesforce.com/docs/atlas.en-us.mobile_sdk.meta/mobile_sdk/oauth_refresh_token_flow.htm\">Salesforce Refresh Token</a> used for Airbyte to access your Salesforce account.",
          "order": 4,
          "title": "Refresh Token",
          "type": "string"
        },
        "start_date": {
          "description": "Enter the date (or date-time) in the YYYY-MM-DD or YYYY-MM-DDTHH:mm:ssZ format. Airbyte will replicate the data updated on and after this date. If this field is blank, Airbyte will replicate the data for last two years.",
          "examples": [
            "2021-07-25",
            "2021-07-25T00:00:00Z"
          ],
          "format": "date-time",
          "order": 5,
          "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?)$",
          "pattern_descriptor": "YYYY-MM-DD or YYYY-MM-DDTHH:mm:ssZ",
          "title": "Start Date",
          "type": "string"
        },
        "stream_slice_step": {
          "default": "P30D",
          "description": "The size of the time window (ISO8601 duration) to slice requests.",
          "examples": [
            "PT12H",
            "P7D",
            "P30D",
            "P1M",
            "P1Y"
          ],
          "order": 7,
          "title": "Stream Slice Step for Incremental sync",
          "type": "string"
        },
        "streams_criteria": {
          "description": "Add filters to select only required stream based on `SObject` name. Use this field to filter which tables are displayed by this connector. This is useful if your Salesforce account has a large number of tables (>1000), in which case you may find it easier to navigate the UI and speed up the connector's performance if you restrict the tables displayed by this connector.",
          "items": {
            "properties": {
              "criteria": {
                "default": "contains",
                "enum": [
                  "starts with",
                  "ends with",
                  "contains",
                  "exacts",
                  "starts not with",
                  "ends not with",
                  "not contains",
                  "not exacts"
                ],
                "order": 1,
                "title": "Search criteria",
                "type": "string"
              },
              "value": {
                "order": 2,
                "title": "Search value",
                "type": "string"
              }
            },
            "required": [
              "criteria",
              "value"
            ],
            "type": "object"
          },
          "order": 9,
          "title": "Filter Salesforce Objects",
          "type": "array"
        }
      },
      "required": [
        "client_id",
        "client_secret",
        "refresh_token"
      ],
      "title": "Salesforce Source Spec",
      "type": "object"
    },
    "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce",
    "supportsDBT": false,
    "supportsNormalization": false
  },
  "suggestedStreams": {
    "streams": [
      "Account",
      "Contact",
      "Lead",
      "Opportunity",
      "OpportunityStage",
      "Stage",
      "Task",
      "User"
    ]
  },
  "supportLevel": "certified",
  "supportsDataActivation": false,
  "supportsFileTransfer": false,
  "tags": [
    "language:python",
    "cdk:python"
  ],
  "tombstone": false
}
