{"library":"salesforce-bulk","title":"Salesforce Bulk API Client","description":"A Python interface to the Salesforce.com Bulk API, enabling efficient, asynchronous processing of large data sets for insert, update, upsert, and delete operations. The current version is 2.2.0, with a release cadence that has seen updates in 2023 and 2024, indicating active maintenance.","language":"python","status":"active","last_verified":"Wed May 20","install":{"commands":["pip install salesforce-bulk"],"cli":null},"imports":["from salesforce_bulk import SalesforceBulk","from salesforce_bulk import BulkJobState","from salesforce_bulk import BulkBatchState"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport time\nfrom salesforce_bulk import SalesforceBulk, BulkJobState, BulkBatchState\n\n# Configure Salesforce credentials using environment variables\nSF_USERNAME = os.environ.get('SF_USERNAME', 'your_sf_username')\nSF_PASSWORD = os.environ.get('SF_PASSWORD', 'your_sf_password')\nSF_SECURITY_TOKEN = os.environ.get('SF_SECURITY_TOKEN', 'your_sf_security_token')\nSF_INSTANCE_URL = os.environ.get('SF_INSTANCE_URL', 'https://your_instance.my.salesforce.com') # Optional, if using My Domain\n\nif SF_USERNAME == 'your_sf_username':\n    print(\"WARNING: Please set SF_USERNAME, SF_PASSWORD, and SF_SECURITY_TOKEN environment variables.\")\n    print(\"Skipping quickstart execution.\")\nelse:\n    try:\n        # Initialize SalesforceBulk client\n        # For Sandbox/Production, usually username/password/security_token is sufficient.\n        # For My Domain or specific instances, instance_url might be needed.\n        sf_bulk = SalesforceBulk(\n            username=SF_USERNAME,\n            password=SF_PASSWORD,\n            security_token=SF_SECURITY_TOKEN,\n            instance_url=SF_INSTANCE_URL # Optional, if not using My Domain or standard instance\n        )\n\n        # Example: Create an 'Account' insert job\n        job = sf_bulk.create_job(object_name='Account', operation='insert')\n        print(f\"Created Bulk Job: {job['id']}\")\n\n        # Prepare data (list of dictionaries)\n        accounts_data = [\n            {'Name': 'Test Account 1', 'Industry': 'Technology'},\n            {'Name': 'Test Account 2', 'Industry': 'Healthcare'}\n        ]\n\n        # Add a batch to the job\n        batch = sf_bulk.post_batch(job_id=job['id'], data=accounts_data)\n        print(f\"Posted Batch: {batch['id']}\")\n\n        # Close the job (important: no more batches can be added after this)\n        sf_bulk.close_job(job_id=job['id'])\n        print(f\"Closed Bulk Job: {job['id']}\")\n\n        # Poll for job and batch status (Bulk API is asynchronous)\n        print(\"Polling for job and batch completion...\")\n        while True:\n            job_status = sf_bulk.get_job_info(job_id=job['id'])\n            batch_status = sf_bulk.get_batch_info(job_id=job['id'], batch_id=batch['id'])\n            print(f\"Job State: {job_status['state']}, Batch State: {batch_status['state']}\")\n\n            if job_status['state'] == BulkJobState.CLOSED and batch_status['state'] in [BulkBatchState.COMPLETED, BulkBatchState.FAILED]:\n                break\n            time.sleep(5) # Wait for 5 seconds before re-polling\n\n        if batch_status['state'] == BulkBatchState.COMPLETED:\n            print(\"Batch completed successfully!\")\n            # Retrieve results\n            results = sf_bulk.get_batch_results(job_id=job['id'], batch_id=batch['id'])\n            print(\"Batch Results:\")\n            for res in results:\n                print(f\"  Success: {res['success']}, Id: {res['id']}, Error: {res.get('errors')}\")\n        else:\n            print(f\"Batch failed with state: {batch_status['state']}\")\n            print(f\"Job failures: {job_status.get('numberRecordsFailed')}\")\n            print(f\"Batch errors: {sf_bulk.get_batch_results(job_id=job['id'], batch_id=batch['id'])}\")\n\n    except Exception as e:\n        print(f\"An error occurred: {e}\")","lang":"python","description":"This quickstart demonstrates how to connect to Salesforce using `SalesforceBulk`, create an 'insert' job for 'Account' objects, post a batch of data, close the job, and then poll for its completion. It also shows how to retrieve results from completed batches. Remember that the Salesforce Bulk API is asynchronous, so polling is necessary.","tag":null,"tag_description":null,"last_tested":"2026-04-25","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-20","installed_version":"2.2.0","pypi_latest":"2.2.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":6.2,"avg_import_s":1.04,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.91,"mem_mb":17.1,"disk_size":"59.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.01,"mem_mb":16.9,"disk_size":"58.2M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":5.6,"import_time_s":0.69,"mem_mb":17.1,"disk_size":"60M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.8,"mem_mb":16.9,"disk_size":"59M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.14,"mem_mb":18.8,"disk_size":"63.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.4,"mem_mb":18.6,"disk_size":"62.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":5.3,"import_time_s":1.04,"mem_mb":18.8,"disk_size":"63M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.19,"mem_mb":18.6,"disk_size":"62M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.07,"mem_mb":18.4,"disk_size":"52.9M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.19,"mem_mb":18.2,"disk_size":"51.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":7,"import_time_s":1.07,"mem_mb":18.4,"disk_size":"53M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.23,"mem_mb":18.2,"disk_size":"52M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.02,"mem_mb":19.3,"disk_size":"52.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.1,"mem_mb":19.1,"disk_size":"51.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":6.3,"import_time_s":1.02,"mem_mb":19.3,"disk_size":"53M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.31,"mem_mb":19.1,"disk_size":"52M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.83,"mem_mb":16.8,"disk_size":"59.4M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.04,"mem_mb":16.6,"disk_size":"58.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":6.5,"import_time_s":0.81,"mem_mb":16.8,"disk_size":"60M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"salesforce-bulk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.88,"mem_mb":16.6,"disk_size":"59M"}]}}