{"id":44963,"library":"fivetran-connector-sdk","title":"Fivetran Connector SDK","description":"Python SDK for building custom Fivetran connectors. Version 2.9.1, requires Python >=3.10. Development is active; new versions released on PyPI regularly.","status":"active","version":"2.9.1","language":"python","source_language":"en","source_url":"https://github.com/fivetran/fivetran-connector-sdk","tags":["fivetran","connector","el","etl","sync"],"install":[{"cmd":"pip install fivetran-connector-sdk","lang":"bash","label":"Install from PyPI"}],"dependencies":[],"imports":[{"note":"The top-level package is fivetran_connector_sdk, not connector.","wrong":"import connector","symbol":"connector","correct":"from fivetran_connector_sdk import Connector"},{"note":"Operations are under the `Operations` class; use `op.upsert()` pattern.","wrong":"from fivetran_connector_sdk import UpdateOperation","symbol":"UpdateOperation","correct":"from fivetran_connector_sdk import Operations as op"}],"quickstart":{"code":"from fivetran_connector_sdk import Connector\nfrom fivetran_connector_sdk import Operations as op\nimport os\n\ndef update(configuration, state):\n    yield op.upsert(\"users\", {\"id\": 1, \"name\": \"Alice\"})\n\nconnector = Connector(update=update)\nif __name__ == \"__main__\":\n    connector.run()","lang":"python","description":"Minimal connector that yields one record on each sync."},"warnings":[{"fix":"Update function parameter name and access config values via dict methods.","message":"In v2, the `update` function signature changed from `update(config, state)` to `update(configuration, state)`. The config parameter is now a dict-like object.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Replace `from fivetran_connector_sdk import upsert` with the Operations import.","message":"The `Operations` class replaced individual operation imports like `upsert`, `update`, `delete`. You must import `from fivetran_connector_sdk import Operations as op` and use `op.upsert()`.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Add `connection_type='direct'` to prevent waiting for Fivetran platform.","message":"The `run()` method blocks indefinitely. For local testing, use `connector.run(connection_type='direct')` or provide a state file to avoid hanging.","severity":"gotcha","affected_versions":"all"},{"fix":"Parse configuration values using `configuration.get('key')` and convert as needed.","message":"Configuration values in `configuration` are strings by default. Convert types explicitly (e.g., `int(configuration.get('start_date', ''))`).","severity":"gotcha","affected_versions":"all"},{"fix":"Access secrets via `configuration['secret_key']` in the update function.","message":"The `secrets` module in the SDK is deprecated. Use `configuration` dict for secrets instead.","severity":"deprecated","affected_versions":">=2.5.0"}],"env_vars":null,"search_vec":"'2.9.1':12 '3.10':15 'activ':18 'build':7 'connector':2,10,26 'custom':8 'develop':16 'el':27 'etl':28 'fivetran':1,9,25 'new':19 'pypi':23 'python':4,14 'regular':24 'releas':21 'requir':13 'sdk':3,5 'sync':29 'version':11,20","created_at":"2026-06-07T12:52:42.036412+00:00","updated_at":"2026-06-07T12:52:42.036412+00:00","problems":[{"fix":"Run `pip install fivetran-connector-sdk` and ensure you use Python 3.10+.","cause":"Installed wrong package or not installed in active environment.","error":"ModuleNotFoundError: No module named 'fivetran_connector_sdk'"},{"fix":"Define update as `def update(configuration, state):` with both arguments.","cause":"Update function signature is missing the second parameter (state).","error":"TypeError: update() missing 1 required positional argument: 'state'"},{"fix":"Import Operations: `from fivetran_connector_sdk import Operations as op` and use `op.upsert()`.","cause":"Attempting to import upsert directly from the package.","error":"AttributeError: module 'fivetran_connector_sdk' has no attribute 'upsert'"},{"fix":"Add `connector.run(connection_type='direct')` for local development.","cause":"Running `run()` without `connection_type='direct'` when not connected to Fivetran platform.","error":"fivetran_connector_sdk.exceptions.FivetranConnectorException: Connection refused"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":null,"github":null,"docs":null,"changelog":null,"pypi":null,"npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"passing","verified_at":"2026-06-29","last_verified":"2026-06-29","next_check":"2026-07-29","install_tag":null}}