A simple ETL Python Framework for Salesforce, built on DLT, featuring Bulk API v2 connectors and utility components.
DLT is a powerful open-source data loading library, but it was missing key Salesforce components out of the box:
- Source & destination connectors on standard Salesforce Bulk API v2
- A Key Resolver to convert external IDs into Salesforce IDs
Stairway to Salesforce fills that gap, while staying fully compatible with the DLT ecosystem.
- Simple pipeline definition using the DLT framework
- Salesforce Bulk API v2 source and destination connectors
- Compatible with all DLT connectors, both official and community
- Full DLT feature support — credentials, schema validation, incremental loading, memory management
- Salesforce Key Resolver — convert external IDs to Salesforce IDs for lookups and deletes
- Simplified environment management — differentiate dev/test credentials from production
- Apache Airflow compatible for orchestration and scheduling
This section will show you how to run a complete prospecting pipeline: fetching live tech companies from the French Government API and upserting them directly into your Salesforce sandbox as Accounts. It’s the perfect way to test the framework's power with real-world data in seconds.
- Python 3.12+: The framework leverages modern type hinting and syntax.
- uv: (Highly recommended) Fast Python package manager. Install it here.
- Git: To clone the repository (as the project is not yet on PyPI).
- Salesforce Sandbox/Org: With API access enabled and an External App configured.
# Clone the repository
git clone https://github.com/SFXD/stairway-to-salesforce.git
cd stairway-to-salesforce
# Sync dependencies and install the project in the local environment
uv sync- Account External Key field on Account : Create a text custom field
ExternalId__c(Text, Unique, External ID) on the Account object. - Configure an external app and keep the client id and client secret for the next step
- Rename or copy
.dlt/secrets.toml.exampleto.dlt/secrets.toml. - Fill in your Salesforce credentials under the
[salesforce.dev]section:
[salesforce.dev]
client_id = "..."
client_secret = "..."
domain = "..."For other auth methods (JWT) or production storage, see Full Documentation.
uv run pipelines/01_get_prospects_from_api.py --env devThe tech companies fetched from the French Government API are now upserted into your Salesforce sandbox as Accounts. You can verify the results by searching for accounts with the Type "Prospect" or by checking the ExternalId__c field. The data volume is limited to the first page (of the API) with a maximum of 25 records, limited to only public data, filtering out "Individual Entrepreneurs".
💡 This flagship sample demonstrates a complete "API-to-Salesforce" flow. You can now adapt this pattern to connect Salesforce with any DLT verified source (SQL databases, REST APIs, Cloud Storage) using the same standardized 5-step logic.
Complete documentation available at: https://sfxd.github.io/stairway-to-salesforce/
See CONTRIBUTING.md for development setup and guidelines.
Apache-2.0 -See LICENSE file for details.