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-Afterheaders - OpenTelemetry compatible - Works with standard HTTPX instrumentation
- Streaming pagination - Memory-efficient bulk data operations with
max_concurrencysupport
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])
Configuration Files (Recommended)
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 offrom_json()orfrom_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.18
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dealcloud_sdk-1.0.18.tar.gz | 2.4 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dealcloud_sdk-1.0.18-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.6 MB
Release files / dealcloud_sdk-1.0.18.tar.gz
| Download URL | dealcloud_sdk-1.0.18.tar.gz |
|---|---|
| Size | 2.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9316de47017a9e59755af8af6c99628b13499debc09e08c12264ce5255481936
|
|
BLAKE2b-256 checksum How to use checksums |
dabd1ffa407c2aa6fcb54b1a14085050f8c7c804b23aa7070581fca4edcdc10c
|
| 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.18-py3-none-any.whl
| Download URL | dealcloud_sdk-1.0.18-py3-none-any.whl |
|---|---|
| Size | 171.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
61b5294ea71456f360a45ced8271128399289298474fd13d7f7f70dbc784f869
|
|
BLAKE2b-256 checksum How to use checksums |
1b8a0df35bad917e865a175768626392c51702496d577256a9db587e2d38c7f3
|
| 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.18
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.