Skip to main content

Intapp DealCloud SDK

A modern Python SDK for the DealCloud API, built on HTTPX via intapp-rest-client.

Overview

The SDK is a complete rewrite and a near drop-in replacement for the official dealcloud_sdk, providing a similar and more advanced enterprise featureset that covers a robust API surface of DealCloud.

  • HTTPX-based HTTP client - Modern async-capable HTTP library
  • Improved retry handling - Per-status-code retry counts with exponential backoff
  • Configurable concurrency - Fine-grained control over parallel operations
  • Full configuration support - Comprehensive settings for retry, concurrency, and pagination
  • Better rate limit handling - Respects Retry-After headers
  • OpenTelemetry compatible - Works with standard HTTPX instrumentation
  • Streaming pagination - Memory-efficient bulk data operations with max_concurrency support

Documentation: See the full guide and API reference on the DealCloud documentation site: Python SDK · Changelog

Migration and staying on legacy

Migration Guide: If you are using the dealcloud-sdk versions below this, make sure to see the migration guide: Migration Guide

Until you are ready to complete your migration, change your pyproject.toml to "dealcloud-sdk<1.0.0"

Installation

# Using uv (recommended)
uv add dealcloud-sdk

# With YAML configuration support
uv add dealcloud-sdk[yaml]

# Using pip
pip install dealcloud-sdk

Quick Start

Simple Usage

from dealcloud_sdk import DealCloud

# Initialize with credentials
dc = DealCloud(
    site_url="client.dealcloud.com",
    client_id="12345",
    client_secret="your_secret",
)

# Read data as pandas DataFrame
data = dc.read_data("Company", output="pandas", resolve="name")

# Get schema
schema = dc.get_schema()
users = dc.get_users()

# Write data
dc.insert_data("Company", data=[{"Name": "New Company"}])

# Delete data
dc.delete_data("Company", records=[123, 456])

Use from_config() for full control over retry, concurrency, and pagination settings. Works with both JSON and YAML files:

# Auto-detects JSON or YAML by file extension
dc = DealCloud.from_config("config.json")
dc = DealCloud.from_config("config.yaml")

config.json (full configuration format):

{
    "siteUrl": "client.dealcloud.com",
    "clientId": "12345",
    "clientSecret": "secret",
    "connectorTimeoutSeconds": 100,
    "querySettings": {
        "pageSize": 1000,
        "cellPaginationLimit": 9000,
        "deletePageSize": 10000
    },
    "concurrencyLimits": {
        "read": 2,
        "delete": 2,
        "create": 2
    },
    "responseRetrySettings": {
        "tooManyRequests": 5,
        "internalServerError": 2,
        "badGateway": 2,
        "serviceUnavailable": 2,
        "gatewayTimeout": 2,
        "backoffFactor": 2.0,
        "maxBackoffSeconds": 300.0
    }
}

Environment Variables

# Uses DC_SITE_URL, DC_CLIENT_ID, DC_API_KEY
dc = DealCloud.from_env()

Context Manager

with DealCloud(
    site_url="client.dealcloud.com",
    client_id="12345",
    client_secret="your_secret",
) as dc:
    data = dc.read_data("Company", output="pandas")
# Connection automatically closed

API Reference

For the full API Reference: API Reference

Schema Operations

Method Description Returns
get_users(active_only=False) Get all DealCloud users list[User]
get_currencies() Get enabled currencies list[str]
get_objects() Get all configured objects list[Object]
get_fields(object_id=None, field_id=None) Get field metadata list[Field]
get_schema(key_type='api') Get full site schema Schema

Data Operations

Method Description Returns
list_configured_views(is_private=None) List all views Rows
resolve_view(view) Resolve view ID or name to metadata row dict
resolve_view_display_name(view) Resolve view ID or name to display name str
read_data(..., output=required, ...) Read data with pagination; output is required ("pandas", "list", "polars", "polars_lazy") DataFrame, list, Polars types, or BatchResult if error_handling=COLLECT
insert_data(object_api_name, data, ...) Insert records list[dict], DataFrame, Polars types, or BatchResult
update_data(object_api_name, data, ...) Update records list[dict], DataFrame, Polars types, or BatchResult
upsert_data(object_api_name, data, ...) Insert or update list[dict], DataFrame, or Polars types
delete_data(object_api_name, records, ...) Delete records list[dict] or BatchResult if error_handling=COLLECT

Streaming Operations (Memory-Efficient)

For large datasets, use streaming methods to avoid loading all data into memory:

Method Description Returns
read_data_streaming(object_id, ...) Stream object data in batches Iterator[list[dict]]
read_view_streaming(view_id, ...) Stream view data in batches Iterator[list[dict]]
aread_data_streaming(object_id, ...) Async stream object data AsyncIterator[list[dict]]
aread_view_streaming(view_id, ...) Async stream view data AsyncIterator[list[dict]]

Example: Bulk Delete with Streaming

# Stream and delete in batches (efficient for millions of rows)
for batch in dc.read_data_streaming("TempData", fields=["EntryId"], max_concurrency=5):
    entry_ids = [row["EntryId"] for row in batch]
    dc.delete_data("TempData", entry_ids)
    print(f"Deleted {len(entry_ids)} rows")

Example: Parallel Page Fetching

# Fetch pages in parallel for faster throughput
for batch in dc.read_data_streaming("Company", max_concurrency=10):
    process(batch)

# Or use configured concurrency from config.json
for batch in dc.read_view_streaming("My View"):
    process(batch)  # Uses concurrencyLimits.read from config

Factory Methods

Method Description Best For
DealCloud.from_config(path) Create from JSON/YAML config file (RECOMMENDED) Production deployments, full configuration
DealCloud.from_env() Create from environment variables CI/CD pipelines, containerized deployments
DealCloud.from_config_object(config) Create from DealCloudConfig object Programmatic configuration
DealCloud.from_json(path) Create from JSON config (legacy format support) Backward compatibility, nested configs
DealCloud.from_yaml(path) Create from YAML config (legacy format support) Backward compatibility, nested configs

Note: For full configuration files, use from_config() instead of from_json() or from_yaml(). The format-specific methods are primarily for legacy format support and nested configuration paths.

Error Handling

from dealcloud_sdk import (
    DealCloudApiError,
    DealCloudValidationError,
    DealCloudRateLimitError,
    DealCloudAuthError,
)

try:
    data = dc.read_data("Company", output="pandas")
except DealCloudRateLimitError as e:
    print(f"Rate limited, retry after {e.retry_after}s")
except DealCloudAuthError as e:
    print(f"Authentication failed: {e}")
except DealCloudApiError as e:
    print(f"API error {e.status_code}: {e.message}")

Source

This SDK is distributed under the Intapp License for Supplemental Software (LICENSE). It is not open source.

Source for inspection and learning is provided via the PyPI source distribution (and hand-delivered tarballs built the same way). Full documentation: DealCloud Python SDK documentation.

License

Intapp License — see LICENSE.

Metadata

Release files for dealcloud-sdk 1.0.16

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dealcloud-sdk 1.0.16
File Size Uploaded Provenance
dealcloud_sdk-1.0.16.tar.gz 266.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for dealcloud-sdk 1.0.16
File Interpreter ABI Platform
dealcloud_sdk-1.0.16-py3-none-any.whl Python 3 none any Details

Total release size: 437.6 kB

Release files / dealcloud_sdk-1.0.16.tar.gz

Download URL dealcloud_sdk-1.0.16.tar.gz
Size 266.2 kB
Tags Source
SHA-256 checksum
How to use checksums
57c19b50c0195072b463bd708c67944419735ec5cb813518bcc0f948fc650056
BLAKE2b-256 checksum
How to use checksums
e0386f13a93e8b2dcc681f394c3028343f5541cc34a99066598ff91f1ce078a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.1

Release files / dealcloud_sdk-1.0.16-py3-none-any.whl

Download URL dealcloud_sdk-1.0.16-py3-none-any.whl
Size 171.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c904cc6f55f791a53859cef6285fda8fac875e13cd9d936b30a6e36acae9f313
BLAKE2b-256 checksum
How to use checksums
dba92c1671223cb3f8b3c80989e02be2a68917ccf38e43b3337edaba6a6b0a1f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.1

Security for dealcloud-sdk 1.0.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page