DealMachine

io.github.DealMachine由 GitHub 账号 DealMachine 发布v0.3.1更新于 Nov 4, 2026

Find US property owners, including LLCs, plus owner phones and emails. Needs a DealMachine account.

发布方自己的服务:SentientData Market Scan

已验证Streamable HTTP可网页运行位置与生活数据与分析商业与电商

概览

AI 生成的概览

DealMachine MCP 服务器,让 AI 助手查询美国房产所有者、业主电话与邮箱、可比成交,并管理潜在客户名单。

可以做什么
  • 按地址、经纬度或 APN 查询房产所有者,按姓名、邮箱或电话查询个人
  • 按地区和筛选条件搜索并统计房产或人群,包括公司或 LLC 持有的房产
  • 按 ID 单个或批量获取房产与个人记录,并将匹配结果导出为 CSV
  • 查询标的房产的可比成交与估值参考
  • 管理潜在客户、名单、标签、任务、信件设计、回邮地址和 Webhook
  • 查看账户套餐、数据额度与用量,并查询可用的筛选器和字段
适用场景
适合房地产投资、批发和经纪业务人员,让助手在对话中完成美国房产产权调查、收集业主联系方式、建立潜在客户名单或获取可比成交。免费统计与费用预估便于在消耗额度前先做评估。
运行要求
使用远程托管端点,MCP 连接无需本地安装。需要 DealMachine 账户并通过 OAuth 登录,或在支持 bearer token 的客户端中使用 DealMachine API 密钥。多数记录查询与数据补全需要付费权限;免费账户可进行统计和费用预估。
安装前请注意
多数查询和导出会消耗付费数据额度,导出可能返回大量联系人,建议先预估费用并确认。写入与删除类工具会修改或移除名单、潜在客户、标签、任务、设计、回邮地址和 Webhook,部分删除不可撤销。业主姓名、电话和邮箱属于个人数据,外呼前应留意 DNC 标记。切勿在对话中提供密码、支付信息或 API 密钥。

安装

在 SourceWeft 中

  1. 打开 控制台中的 DealMachine,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.DealMachine%2Fdealmachine/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "dealmachine": {
      "type": "http",
      "url": "https://mcp.dealmachine.com/"
    }
  }
}

README

DealMachine CLI

Maintainers: agent instructions, development, current Command reference, and npm releases.

DealMachine CLI (dm) -- property intelligence from the command line.

A standalone Commander.js CLI that talks to the DealMachine REST API. Provides Commands for authentication, property and people research, enrichment, lists, prospects, tags, webhooks, mail and developer utilities. Compiles to ESM JavaScript via tsc.

This package has zero @dealmachine/* dependencies -- it is a self-contained binary that communicates exclusively through the public API.


AI agent integrations

This repository is also the public distribution package for the DealMachine MCP server and DealMachine skill.

  • Hosted MCP server: https://mcp.dealmachine.com
  • API documentation: https://api.docs.dealmachine.com
  • Account and API keys: https://dealmachine.com/settings/developer
  • Privacy policy: https://dealmachine.com/privacy-policy
  • Terms of service: https://dealmachine.com/terms-of-service
  • Support: [email protected]

The MCP server supports OAuth 2.1 for ChatGPT, Claude, Cursor, Codex, and other compatible clients. It can also use a DealMachine API key in developer clients that support bearer-token configuration.

The plugin package includes:

  • A hosted MCP connection for property, people, enrichment, comparable-sales, and account tools
  • A credit-aware skill that discovers filters and fields, counts first, and confirms large paid operations
  • A portable Agent Plugins package for compatible clients
  • Manifests for OpenAI, Claude, Cursor, GitHub Copilot, and Gemini
  • Official MCP Registry metadata in server.json

The portable package follows Agent Plugins 1.0.0:

text
dealmachine-cli/├── plugin.json├── mcp.json└── skills/    └── dealmachine/        ├── SKILL.md        ├── REFERENCE.md        └── SETUP.md

Compatible clients discover the DealMachine skill from skills/dealmachine/ and connect to the hosted Streamable HTTP MCP server declared in mcp.json. Client-specific manifests remain in the repository for compatibility, marketplace metadata, and richer presentation.

Example requests:

  • "Find high-equity absentee-owned properties in Austin and estimate the credit cost first."
  • "Look up the owner of this property and find available contact data."
  • "Find comparable sales for this property."
  • "Research people who match these criteria for a targeted prospecting list."

Direct skill installation:

bash
npx skills add DealMachine/dealmachine-cli

Table of Contents


Installation

From npm (global)

bash
npm install -g dealmachinedm login

The canonical implementation package is @dealmachine/cli. The dealmachine package is the short install alias and provides the same dm command.

From source

bash
cd dealmachine-clinpm run buildnode dist/index.js whoami

Link for local development

bash
cd dealmachine-clinpm linkdm --version

The binary entry is dist/index.js, declared in package.json under bin.dm. Requires Node.js >= 18.


Authentication

The CLI supports two authentication methods.

Device Auth Flow (RFC 8628)

The default dm login command uses the OAuth 2.0 Device Authorization Grant (RFC 8628). This is the recommended flow for interactive use:

bash
dm login
  1. The CLI requests a device code from POST /v1/auth/device/code with client ID dealmachine-next-cli and your machine's hostname.
  2. A verification URL and user code are displayed. The browser opens automatically (unless --no-browser).
  3. You authorize the device in the browser by entering the user code.
  4. The CLI polls POST /v1/auth/device/token at the server-specified interval.
  5. On success, the API key, key ID, and organization details are stored to ~/.dealmachine/config.json.

The polling handles all RFC 8628 responses: authorization_pending, slow_down (backs off by 5s), access_denied, and expired_token.

bash
# Skip auto-opening the browserdm login --no-browser
# Target a specific environmentdm login --env localdm login --env staging

Direct API Key Login

For CI pipelines, scripts, or local development, pass an API key directly:

bash
dm login --key dm_sk_live_abc123...

The key is verified against GET /v1/account before being stored. If verification fails, the CLI exits with a non-zero code.

If you do not have an API key yet, use dm signup <email> --login or dm login. Free accounts can count matches and estimate costs before paying. Public plan checkout only accepts self-serve Basic and Pro prices from the shared plan catalog and is capped at 60,000 monthly data credits.

Switching Environments

If you are already logged in, you can switch the target API environment without logging out:

bash
dm login --env local       # Switch to http://localhost:3001/v1dm login --env staging     # Switch to https://api-staging.v2.dealmachine.com/v1dm login --env production  # Switch to https://api.v2.dealmachine.com/v1

Logout

bash
dm logout

Removes the config file at ~/.dealmachine/config.json.


Configuration

Credentials are stored at ~/.dealmachine/config.json with file permissions 0600 (owner read/write only). The config directory ~/.dealmachine/ is created with mode 0700.

Config File Schema

json
{  "apiKey": "dm_sk_live_...",  "keyId": "key_abc123",  "organizationId": 42,  "organizationName": "Acme Corp",  "organizationSlug": "acme-corp",  "apiEnvironment": "production"}

Environment Variables

The CLI checks these environment variables for API URL resolution (in priority order):

VariablePurposeExample
DM_API_URL / DEALMACHINE_API_URLDirect URL overridehttp://localhost:3001/v1
DM_ENV / DEALMACHINE_ENVIRONMENTEnvironment namelocal, staging, or production

If none are set, the CLI falls back to the apiEnvironment field in the config file, then defaults to production.

API Environments

EnvironmentURL
localhttp://localhost:3001/v1
staginghttps://api-staging.v2.dealmachine.com/v1
productionhttps://api.v2.dealmachine.com/v1

Commands

Agents Commands

dm agents

Print concise guidance for agents using the CLI. This is the recommended first command when an agent has access to dm but has not loaded the DealMachine Playbook yet.

bash
dm agentsdm agents --json

The guide tells agents to use --json and --quiet, verify auth, fetch live filters and fields before searches, count before credit-consuming work, and confirm expected credit usage before fetching records or exporting.

dm agents guide

Print the same concise agent guidance explicitly.

bash
dm agents guidedm agents guide --json
dm agents playbook

Print the bundled DealMachine Playbook Markdown. Agents should load this before translating natural language property, people, contact, enrichment, list, export, comps, or credit-usage requests into CLI commands.

bash
dm agents playbookdm agents playbook --jsondm agents skill        # alias

The public CLI source keeps its bundled Playbook at playbook/PLAYBOOK.md. The build writes the selected source to dist/agents/dealmachine-playbook.md, so the command works from a published CLI package as well as a local source checkout.

dm agents install claude-code

Install the Playbook as a native Claude Code skill. Personal scope is the default. Project scope installs under the current repository.

bash
dm agents install claude-codedm agents install claude-code --project
dm agents permissions

Print the narrow Claude Code allowlist for free discovery and count commands. Paid and mutating commands are not pre-approved.

bash
dm agents permissionsdm agents permissions --json

Auth Commands

dm signup

Create a public API account and receive an API key. With --login, the credential is saved locally and omitted from output (including JSON); use this form from an agent:

bash
dm signup [email protected] --first-name Ada --last-name Lovelace --phone-number +15551234567dm signup [email protected] --login
dm plans

List live self-serve plans, included credits, features and free API access. Connected customers receive their workspace prices:

bash
dm plansdm plans --json
dm checkout

Preview the recurring terms using a current price ID from dm plans. After the customer approves the exact price, billing interval and quantity, add --yes to create the Stripe checkout link:

bash
dm checkout --price-id price_xxx_monthly --quantity 1 --json# Only after approval:dm checkout --price-id price_xxx_monthly --quantity 1 --yes --json

Payment is completed on Stripe. Creating checkout does not activate a plan; check dm account --json and dm usage after payment before retrying enrichment. Counts do not award credits. Free operations still require authentication and obey permissions and rate limits.

dm login

Authenticate with your DealMachine account.

bash
dm login                            # Device auth flow (opens browser)dm login --no-browser               # Device auth, manual code entrydm login --key dm_sk_live_abc123    # Direct API keydm login --env local                # Target local API
OptionDescription
--no-browserDo not automatically open the browser
--key <api-key>Login directly with an API key (skips browser)
--env <environment>API environment: local, staging, or production
dm logout

Remove stored credentials.

bash
dm logout
dm whoami

Show current authentication status.

bash
dm whoami               # Show stored credentialsdm whoami --verify      # Verify credentials against the API
OptionDescription
--verifyVerify credentials with the API

Config Commands

dm config get [key]

Get a configuration value, or display all values when no key is given.

bash
dm config get                   # Show all config valuesdm config get apiEnvironment    # Show specific valuedm config get apiKey            # Shows truncated key (first 20 chars)

Available keys: organizationName, organizationSlug, organizationId, apiEnvironment, keyId, apiKey.

dm config set <key> <value>

Set a configuration value. Only apiEnvironment is editable.

bash
dm config set apiEnvironment localdm config set apiEnvironment stagingdm config set apiEnvironment production
dm config path

Print the absolute path to the config file.

bash
dm config path# /Users/you/.dealmachine/config.json

Account Commands

dm account

Display account information including organization name, ID, creation date, and auth type.

bash
dm account

Output:

Account────────────────────────────────────────Organization:  Acme CorpOrg ID:        42Created:       Jan 15, 2025Auth Type:     api_key

Usage Commands

dm usage

Show credit usage for the current billing cycle.

bash
dm usage           # Human-readable tabledm usage --json    # Machine-readable JSON

Output:

Credit Usage──────────────────────────────────────────────────  Plan:         Pro  Cycle:        Mar 1, 2026 : Mar 31, 2026
  Credits:      4,200 / 10,000 (42%)  Remaining:    5,800
  Breakdown:    Properties: 3,100    People:     1,100

Properties Commands

dm properties search

Search properties with filters and locations.

bash
# Inline JSON bodydm properties search --body '{  "locations": [{"type": "zip_code", "code": "78704"}],  "filters": [{"filter_id": "property_type", "operator": "is_any_of", "value": ["single_family"]}]}'
# From a filedm properties search -f search.json
# Pipe from stdincat search.json | dm properties search
# Machine-readable outputdm properties search -f search.json --json              # Free estimate for scripts and agentsdm properties search -f search.json --json --yes        # Run after approval
# Explicit free estimatedm properties search -f search.json --estimate-cost
# Query Builder protocol filtersdm properties search --include-lists 123,456 --exclude-previously-exported --body '{"locations":[]}'
OptionDescription
--body <json>Request body as JSON string
-f, --file <path>Read request body from a JSON file
--include-lists <ids>Comma-separated list IDs to include
--exclude-lists <ids>Comma-separated list IDs to exclude
--exclude-previously-exportedExclude records already exported by your organization
--bigquery-data-environment <n>Query Builder data environment (1 production, 2 staging, 3 development)
--estimate-costPreview counts and credit cost without consuming credits
--yesConfirm approved credit spend for non-interactive execution
--jsonOutput as JSON
dm properties count

Count properties matching filters without consuming credits.

bash
dm properties count --body '{"locations": [{"type": "state", "code": "TX"}]}'dm properties count -f filters.json --json
dm properties get <id>

Get a single property by its DealMachine ID.

bash
dm properties get prop_12345dm properties get prop_12345 --contact-audience owners_and_familydm properties get prop_12345 --contact-audience nonedm properties get prop_12345 --fields estimated_value,equitydm properties get prop_12345 --json
OptionDescription
--contact-audience <audience>owners, owners_and_family, renters, residents, all, none
--fields <csv>Comma-separated property field IDs from dm fields
--jsonOutput as JSON

Property lookup defaults to owners. If you only need property data, use --contact-audience none. This omits contacts and avoids people credits.

dm properties ids [ids...]

Get multiple properties by their IDs in a single batch request.

bash
# Positional argumentsdm properties ids prop_111 prop_222 prop_333
# Via JSON bodydm properties ids --body '{"ids": ["prop_111", "prop_222"]}'
# From filedm properties ids -f ids.json --contact-audience ownersdm properties ids -f ids.json --contact-audience none
OptionDescription
--body <json>Request body as JSON string
-f, --file <path>Read request body from a JSON file
--contact-audience <audience>Include contacts: owners, owners_and_family, renters, residents, all, none
--jsonOutput as JSON
dm properties export

Export properties as CSV (up to 1,000,000 records). Returns signed download URLs.

bash
dm properties export -f search.jsondm properties export -f search.json --require-phone --scrub-dncdm properties export --body '{"locations": [...]}' --mobile-only --json
OptionDescription
--body <json>Request body as JSON string
-f, --file <path>Read request body from a JSON file
--require-phoneOnly include records where the contact has a phone number
--require-emailOnly include records where the contact has an email address
--mobile-onlyOnly include wireless phone numbers
--landline-onlyOnly include landline phone numbers
--scrub-dncExclude contacts on the Do Not Call registry
--jsonOutput as JSON

People Commands

dm people search

Search people with filters and locations.

bash
dm people search --body '{  "locations": [{"type": "zip_code", "code": "78704"}],  "filters": [{"filter_id": "age", "operator": "between", "value": [30, 50]}]}'dm people search -f people-search.json --jsondm people search -f people-search.json --estimate-costdm people search -f people-search.json --json --yesdm people search --include-lists 123 --exclude-lists 456 --exclude-previously-exported --body '{"locations":[]}'

Non-interactive People Search returns a free estimate unless --yes is supplied. A specific person by name uses dm enrich name, not People Search.

dm people count

Count people matching filters without consuming credits.

bash
dm people count -f filters.json
dm people get <id>

Get a single person by their DealMachine ID.

bash
dm people get per_12345dm people get per_12345 --include-properties --property-limit 20dm people get per_12345 --fields estimated_household_income,estimated_valuedm people get per_12345 --json
OptionDescription
--include-propertiesInclude associated properties
--property-limit <n>Maximum associated properties to return, from 1 through 100
--fields <csv>Comma-separated field IDs from dm fields
--jsonOutput as JSON
dm people ids [ids...]

Get multiple people by their IDs in a single batch request.

bash
dm people ids per_111 per_222 per_333dm people ids --body '{"ids": ["per_111", "per_222"]}' --include-properties --property-limit 20dm people ids per_111 per_222 --fields estimated_household_income,estimated_value
OptionDescription
--include-propertiesInclude associated properties
--property-limit <n>Maximum associated properties to return per person, up to 100
--fields <csv>Comma-separated field IDs from dm fields
dm people export

Export people as CSV (up to 1,000,000 records). Returns signed download URLs.

bash
dm people export -f search.json --require-emaildm people export -f search.json --mobile-only --scrub-dnc --json

Contact filter options are the same as dm properties export.


Enrich Commands

All enrichment commands support three input modes: a positional argument for single-item lookup, --body/-f for JSON payloads, and -f with a .csv file for batch enrichment from CSV. Batches larger than 250 items are automatically chunked. Every enrichment command accepts --fields <csv> and sends the selected field IDs to the API. Email, phone, and name matches also include a free property_count; use --include-properties when you need the property records themselves.

dm enrich address [address]

Look up a property by street address.

bash
# Single addressdm enrich address "123 Main St, Austin, TX 78704"dm enrich address "123 Main St, Austin, TX 78704" --contact-audience nonedm enrich address "123 Main St, Austin, TX 78704" --fields estimated_value,equity
# Batch from JSONdm enrich address --body '{"data": [{"full_address": "123 Main St, Austin, TX"}]}'
# Batch from CSV (auto-detected by .csv extension)dm enrich address -f addresses.csv --contact-audience owners
# CSV columns: full_address (or street, city, state, zip)
OptionDescription
--body <json>Request body as JSON string
-f, --file <path>Read from JSON or CSV file
--contact-audience <audience>owners, owners_and_family, renters, residents, none
--fields <csv>Comma-separated field IDs from dm fields
--jsonOutput as JSON

Use --contact-audience none whenever you only need the property. The response omits contacts and consumes zero people credits.

dm enrich latlng [coords]

Look up a property by latitude/longitude coordinates.

bash
dm enrich latlng 30.25,-97.75dm enrich latlng -f coordinates.csv --fields estimated_value,equity --contact-audience none# CSV columns: latitude, longitude (or lat, lng/lon/long)
dm enrich apn [apn]

Look up a property by Assessor's Parcel Number. Narrow results with --state or --zip.

bash
dm enrich apn "0123-456-789" --state TXdm enrich apn -f parcels.csv --zip 78704 --fields estimated_value,equity# CSV columns: apn (or parcel_id, parcel_number)
OptionDescription
--state <code>Narrow by state (e.g., TX)
--zip <code>Narrow by ZIP code
--contact-audience <audience>owners, owners_and_family, renters, residents, none
--fields <csv>Comma-separated field IDs from dm fields
dm enrich email [email]

Look up a person by email address.

bash
dm enrich email [email protected]dm enrich email [email protected] --include-propertiesdm enrich email -f emails.csv --fields estimated_household_income,estimated_value --json# CSV columns: email (or email_address)
OptionDescription
--include-propertiesInclude associated properties
--fields <csv>Comma-separated field IDs from dm fields
dm enrich phone [phone]

Look up a person by phone number.

bash
dm enrich phone 5125551234dm enrich phone -f phones.csv --include-properties --fields estimated_value# CSV columns: phone (or phone_number)
OptionDescription
--include-propertiesInclude associated properties
--fields <csv>Comma-separated field IDs from dm fields
dm enrich name [name]

Look up people by name. Supports "First Last" or just "Last" format.

bash
dm enrich name "Jane Doe" --state TX --estimate-costdm enrich name "Jane Doe" --state TX --json --yesdm enrich name "Doe" --state TX --page 2dm enrich name "Jane Doe" --zip 78704 --include-propertiesdm enrich name "Jane Doe" --fields estimated_household_income,estimated_value
OptionDescription
--state <code>Narrow by state
--zip <code>Narrow by ZIP code
--include-propertiesInclude associated properties
--fields <csv>Field IDs from dm fields
--estimate-costPreview count and credits
--yesConfirm approved credit spend
--page <n>Page number
--per-page <n>Results per page

Comps Commands

dm comps [property_ids...]

Find comparable properties (sales comps) for one or more properties.

bash
# Single property with defaultsdm comps prop_12345
# Multiple properties with optionsdm comps prop_12345 prop_67890 --radius 2 --timeframe 12months --limit 50
# Full control via JSON bodydm comps --body '{  "property_ids": ["prop_12345"],  "location": {"type": "radius", "radius_miles": 1.5},  "criteria": {"timeframe": "6months", "sort_by": "match", "limit": 25}}'
OptionDescription
--body <json>Request body as JSON string
-f, --file <path>Read request body from a JSON file
--radius <miles>Search radius in miles (default: 1)
--timeframe <period>3months, 6months, 12months, all (default: 6months)
--limit <n>Max comps per property (default: 25, max: 100)
--sort-by <field>distance, price, date, match (default: match)
--sort-direction <dir>asc, desc (default: desc)
--include-foreclosuresInclude foreclosure sales
--jsonOutput as JSON

Output includes subject property details, value estimation with confidence interval, summary statistics (average/median price, price per sqft), and a table of comparable properties.


Lists Commands

dm lists search

Search and list all saved lists.

bash
dm lists searchdm lists search --search "Austin" --source-type properties --sort newestdm lists search --page 2 --per-page 50 --json
OptionDescription
--search <term>Search lists by name
--source-type <type>properties or people
--sort <order>newest, oldest, name, count
-p, --page <n>Page number
--per-page <n>Results per page
dm lists create

Create a new list.

bash
# Empty listdm lists create --name "Austin Leads"
# Pre-populated with record IDs (max 250)dm lists create --name "Hot Leads" --source-type properties --ids 123,456,789
# With search filters for a list builddm lists create --name "TX SFR" -f search-filters.json
OptionDescription
--name <name>List name (required)
--source-type <type>properties or people
--ids <csv>Comma-separated record IDs to pre-populate (max 250)
--body <json>Request body as JSON (filters/locations)
-f, --file <path>Read request body from a JSON file
dm lists get <id>

Get details of a specific list including status, progress, and error state.

bash
dm lists get list_abc123
dm lists update <id>

Rename a list.

bash
dm lists update list_abc123 --name "New Name"
dm lists delete <id>

Delete a list and all its items.

bash
dm lists delete list_abc123
dm lists build <id>

Build a list from search filters. This is an asynchronous operation -- poll with dm lists get for status.

bash
dm lists build list_abc123 -f search-filters.json
dm lists import <id>

Import record IDs into an existing list.

bash
dm lists import list_abc123 --ids 111,222,333 --source-type propertiesdm lists import list_abc123 -f import-payload.json
dm lists items <id>

List items in a list with pagination.

bash
dm lists items list_abc123dm lists items list_abc123 --page 2 --per-page 100 --json
dm lists add <id>

Add items to a list by ID.

bash
dm lists add list_abc123 --ids 111,222,333dm lists add list_abc123 --ids 111,222 --id-type internal_property_id
OptionDescription
--ids <csv>Comma-separated list of IDs to add (required)
--id-type <type>internal_property_id or internal_person_id
dm lists remove <id>

Remove items from a list by ID.

bash
dm lists remove list_abc123 --ids 111,222,333
dm lists export <id>

Export list items. Credits are charged per record.

bash
dm lists export list_abc123dm lists export list_abc123 --fields "full_address,estimated_value,owner_name" --anchor property
OptionDescription
--fields <csv>Comma-separated list of fields to export
--anchor <type>property or person

Filters Commands

dm filters

List available search filters with their types, operators, and groupings.

bash
dm filtersdm filters --source-type properties --search "bed"dm filters --group-id building_information --json
OptionDescription
--source-type <type>properties or people
--group-id <id>Filter by group ID
--search <term>Search filters by name
--page <n>Page number
--per-page <n>Results per page

Fields Commands

dm fields

List available data fields with filterable/sortable flags.

bash
dm fieldsdm fields --source-type people --search "phone"dm fields --group-id contact_info --json
OptionDescription
--source-type <type>properties or people
--group-id <id>Filter by group ID
--search <term>Search fields by name
--page <n>Page number
--per-page <n>Results per page

Locations Commands

Search and retrieve DealMachine locations.

bash
dm locations search -q "Harris" --type county --state TX --jsondm locations get loc_city_48106 --json

dm locations autocomplete remains available as a deprecated alias for dm addresses autocomplete.


Activity Commands

dm activity search

Search past API activity with type filters and free-text search.

bash
dm activity search -t search_properties enrich_addressdm activity search -q "Austin" --page 2dm activity search --body '{"types": ["search_properties"], "page": 1}'
OptionDescription
--body <json>Request body as JSON string
-f, --file <path>Read request body from a JSON file
-t, --types <types...>Filter by activity types (space-separated)
-q, --query <text>Free-text search across activity
--page <n>Page number
--per-page <n>Results per page
dm activity get <id>

Get full details of a specific activity record, including the original request, result summary, and entity IDs (people and properties).

bash
dm activity get act_abc123dm activity get act_abc123 --json

Addresses Commands

dm addresses autocomplete <query>

Return free, bounded address and normalized location suggestions.

bash
dm addresses autocomplete "1200 Barton Springs" --state TXdm addresses autocomplete "saint louis 63101" --scope location --limit 5 --json
OptionDescription
--scope <scope>all, address, or location, default all
--state <code>Prefer a two-letter state abbreviation
--limit <n>Maximum suggestions, default 5 and max 10
--latitude <number>Latitude for nearby ranking, requires longitude
--longitude <number>Longitude for nearby ranking, requires latitude
--jsonOutput raw JSON response

Autocomplete does not request fields, perform enrichment, or consume data credits.

dm addresses validate [address]

Validate and standardize addresses via USPS.

bash
# Single addressdm addresses validate "123 Main St, Austin, TX 78704"
# Batch via JSONdm addresses validate --body '{"data": [{"full_address": "123 Main St, Austin TX"}]}'
# From filedm addresses validate -f addresses.json --json

Output shows each address as valid, corrected (with corrections listed), or invalid (with reason).


Dev Commands

Local development utilities that operate directly against the Docker MySQL container (dealmachine-next-mysql). These require the local database to be running (npm run db:start from the repo root).

dm dev license add <key_id>

Add a license to an API key in the local database.

bash
dm dev license add key_abc123 --type state --code TXdm dev license add key_abc123 --type zip_code --code 78704dm dev license add key_abc123 --type unlimiteddm dev license add key_abc123 --type county --code 48453 --expires 2026-12-31
OptionDescription
--type <type>state, county, zip_code, or unlimited (required)
--code <code>Location code: state abbreviation, FIPS code, or ZIP
--expires <date>Expiration date in ISO format
dm dev license list [key_id]

List all licenses, optionally filtered by key ID.

bash
dm dev license listdm dev license list key_abc123
dm dev license remove <license_id>

Remove a license by its numeric ID.

bash
dm dev license remove 42

Global Options

Every command supports these flags:

FlagDescription
--jsonOutput as machine-readable JSON (for scripting and piping)
--quietSuppress spinners and decorative output for agents/scripts
--helpShow usage information for any command
--versionShow the CLI version

Input Methods

Commands that accept a request body support three input methods, checked in this order:

  1. --body <json> -- Inline JSON string.
  2. -f, --file <path> -- Read from a JSON file. Enrichment commands also accept .csv files for batch processing.
  3. Stdin pipe -- Read JSON from piped input (detected when stdin is not a TTY).
bash
# Inlinedm properties search --body '{"locations": [...]}'
# Filedm properties search -f query.json
# Pipecat query.json | dm properties search
# CSV enrichment (enrich commands only)dm enrich address -f addresses.csv

CSV Batch Enrichment

The enrich commands detect .csv files by extension and auto-parse them. Expected column names per command:

CommandRequired ColumnsAlternative Column Names
enrich addressfull_addressor street + city, state, zip
enrich latlnglatitude, longitudelat, lng/lon/long
enrich apnapnparcel_id, parcel_number
enrich emailemailemail_address
enrich phonephonephone_number

Batches larger than 250 items are automatically chunked with progress spinners. If an export limit is reached mid-batch, the CLI stops and returns results collected so far.


Project Structure

dealmachine-cli/  scripts/    copy-agent-assets.mjs      # Bundles the Playbook Markdown into dist/agents  src/    index.ts                  # Program entrypoint -- registers all 17 command groups    lib/      config.ts               # Read/write ~/.dealmachine/config.json (mode 0600)      client.ts               # HTTP client wrapper (apiRequest, formatDate, getApiKey)      api.ts                  # Device auth flow client (requestDeviceCode, pollForToken, verifyCredentials)      output.ts               # Formatting helpers (printTable, printJson, printKeyValue, parseRequestBody)    commands/      agents.ts               # dm agents    -- agent guide and Playbook output      login.ts                # dm login     -- device auth + API key login      logout.ts               # dm logout    -- remove credentials      whoami.ts               # dm whoami    -- show/verify auth status      config.ts               # dm config    -- get, set, path      account.ts              # dm account   -- show account info      usage.ts                # dm usage     -- credit usage      properties.ts           # dm properties -- search, count, get, ids, export      people.ts               # dm people    -- search, count, get, ids, export      enrich.ts               # dm enrich    -- address, latlng, apn, email, phone, name      comps.ts                # dm comps     -- comparable properties      lists.ts                # dm lists     -- full CRUD + build, import, export      filters.ts              # dm filters   -- list available filters      fields.ts               # dm fields    -- list available fields      activity.ts             # dm activity  -- search, get      addresses.ts            # dm addresses -- validate      dev.ts                  # dm dev       -- local license management  dist/                       # Compiled output (ESM)  package.json  tsconfig.json

Key Modules

ModuleResponsibility
lib/config.tsManages ~/.dealmachine/config.json. Enforces 0600 file permissions and 0700 directory permissions. Provides typed read/write/delete helpers.
lib/client.tsCentral HTTP client. Resolves the API base URL from env vars, config, or defaults. Attaches the Authorization: Bearer header and versioned User-Agent. Exits with a non-zero code on HTTP errors.
lib/api.tsDevice authorization flow implementation. Handles POST /v1/auth/device/code and POST /v1/auth/device/token with RFC 8628-compliant polling and error mapping. Also provides verifyCredentials for key validation.
lib/output.tsAll output formatting: printTable (auto-width columns), printJson, printKeyValue, printPagination, printCredits, printTotals, printWarning, printHeader. Also exports parseRequestBody which handles --body, -f, and stdin input.

Building

bash
npm run build      # Compile TypeScript and bundle agent Playbook assets to dist/npm run dev        # Watch mode (tsc --watch)npm run eval:cold-start:local      # Verify a clean local install and routing contractnpm run eval:cold-start:published  # Verify the latest public npm artifactnpm run eval:cold-start:deployed   # Verify deployed documentation and skill assets

The published and deployed checks are release gates. They are expected to fail before a release is published or the documentation deployment reaches production. The scenario catalog is stored in evals/claude-code-name-lookup.json so the same prompt variants remain visible and reviewable.

Testing

bash
npm test           # Unit and behavioral tests with a mocked API (no credentials)npm run check      # Typecheck, build, tests and the public artifact guardDM_API_URL=https://api-staging.v2.dealmachine.com/v1 DM_API_KEY=<key> npm run smoke:live:coverage

npm test never calls an API. smoke:live:coverage builds the CLI and runs the real dm binary against the API named by DM_API_URL, authenticated with DM_API_KEY. Both are required; the key is never printed. Each Command runs with a temporary home directory, so the smoke never reads or changes your own dm login credentials. It runs only read-only, credit-free Commands:

CommandChecks
dm --versionPrints the package version without a network request
dm account --jsonOrganization, user auth type and plan are present
dm filters --source-type properties --per-page 5 --jsonFilters have IDs, names, operators and pagination
dm fields --source-type properties --per-page 5 --jsonFields have IDs, names and pagination
dm properties search --body <ZIP 78704> --estimate-cost --jsonReturns an estimate with no records and no charged credits

Requests pass through a local relay that refuses anything outside those read-only Endpoints (property search must carry estimate_cost: true) and confirms each request sends X-DealMachine-Source: cli and the CLI User-Agent. The smoke prints one PASS or FAIL line per Command and exits 0 only when every Command passes.

Standalone Binary

The compiled dist/index.js includes a #!/usr/bin/env node shebang and is declared in package.json under bin.dm. When installed globally via npm, it becomes available as dm on the PATH.

For distribution as a standalone binary without npm:

bash
# Buildcd dealmachine-clinpm run build
# The entire dist/ directory is the distributable artifact# dist/index.js is the entrypoint (requires Node.js >= 18 on the target machine)

The files array in package.json ensures only dist/ is included in the published package.

TypeScript Configuration

  • Target: ES2022
  • Module: NodeNext (ESM)
  • Strict mode enabled
  • Outputs declarations, declaration maps, and source maps
  • No project references (standalone compilation)

Adding New Commands

Step 1: Create the command file

Create src/commands/mycommand.ts:

typescript
/** * MyCommand -- description of what this command does */
import chalk from 'chalk';import ora from 'ora';import { apiRequest } from '../lib/client.js';import { printJson, printHeader, printKeyValue } from '../lib/output.js';
interface MyResponse {  data: { id: string; name: string };}
export async function myCommand(options: { json?: boolean }): Promise<void> {  const spinner = ora('Doing something...').start();  const data = await apiRequest<MyResponse>('/my-endpoint');  spinner.stop();
  if (options.json) {    printJson(data);    return;  }
  printHeader('My Command');  printKeyValue({    ID: data.data.id,    Name: data.data.name,  });  console.log();}

Step 2: Register in index.ts

Import and wire up the command in src/index.ts:

typescript
import { myCommand } from './commands/mycommand.js';
// Top-level commandprogram  .command('mycommand')  .description('Description shown in --help')  .option('--json', 'Output as JSON')  .action(async (options) => {    await myCommand(options);  });
// Or as a subcommand groupconst myGroup = program.command('mygroup').description('Group description');
myGroup  .command('sub1')  .description('Subcommand description')  .action(async (options) => {    await mySub1(options);  });

Step 3: Build and test

bash
npm run buildnode dist/index.js mycommand --json

Conventions

  • One file per command group in src/commands/.
  • Always support --json for machine-readable output.
  • Use ora for spinners during API calls.
  • Use chalk for colored terminal output.
  • Use apiRequest<T> from lib/client.ts for all API calls -- it handles auth, errors, and exits.
  • Use parseRequestBody from lib/output.ts when the command accepts --body, -f, or stdin input.
  • Use printHeader, printTable, printKeyValue, printCredits, printPagination for consistent output formatting.
  • All imports must use the .js extension (ESM requirement with NodeNext resolution).

Dependencies

Runtime

PackageVersionPurpose
commander^12.1.0CLI framework -- command registration, option parsing, help generation
chalk^5.3.0Terminal string styling (colors, bold, dim)
ora^8.1.0Spinner animations for async operations
open^10.1.0Opens the browser for the device auth flow

Dev

PackageVersionPurpose
typescript^5.6.3TypeScript compiler
@types/node^22.0.0Node.js type definitions

Internal Package Dependencies

None. This package is a fully standalone binary with zero @dealmachine/* dependencies. It communicates exclusively through the public REST API.

Used By

The Playbook at packages/playbooks/playbook/ uses dm commands to execute property intelligence workflows. The CLI is the primary interface through which the Playbook interacts with DealMachine data. Agents can load the bundled Playbook directly with dm agents playbook.

Factory staging work tracking

The factory-release-intake.yml workflow is maintained on master and reads merged PRs from staging. It reports source and, where registered, the exact staging deployment to Factory Releases, reusing Linear links or creating one configurable pilot tracking issue. Scheduled reconciliation retries missed events without duplicate issues. It does not deploy this repository, run QA or approve production.

The collector is generated from Factory. See automatic staging intake for configuration, source ownership, regeneration and recovery. Staging remains the branch being checked even though the reporting workflow lives on master.

来源:README.md,提交 a1fb258

工具

129

dealmachine_signup

Start a free DealMachine account

Start a free DealMachine account. Returns the secure browser signup URL. Ask the user to finish signup and connect DealMachine using OAuth. Never ask for passwords, payment details or API keys in chat. Signup does not purchase a plan.

无需输入参数。

dealmachine_account

View plan and available credits

Read your active plan and remaining data credits. Free accounts can use this. After Stripe payment, check plan.is_paid and the current balance before retrying approved enrichment. A checkout URL or the user saying they paid is not proof of activation.

无需输入参数。

dealmachine_enrich_address

Enrich Property by Address

Finds who owns a US property from its street address, given as full_address or as street, city, state and zip. Returns the property details; with contact_audience=owners it also returns the owners with their names, phones (with DNC flags) and emails. Contacts are left out unless contact_audience is set. Needs a connected DealMachine account with paid access. A matched property costs one property credit and returned contacts cost people credits; nothing is charged when no property matches.

输入参数zipcitystatefieldsstreetfull_addresscontact_audience

dealmachine_enrich_latlng

Enrich Property by Coordinates

Finds the property closest to a latitude and longitude, within 300 feet, and who owns it. Returns the property details; with contact_audience=owners it also returns the owners with their names, phones (with DNC flags) and emails. Contacts are left out unless contact_audience is set. Needs a connected DealMachine account with paid access. A matched property costs one property credit and returned contacts cost people credits; nothing is charged when no property matches.

输入参数fieldslatitude必填longitude必填contact_audience

dealmachine_enrich_apn

Enrich Property by APN

Finds who owns a property from its Assessor's Parcel Number: one apn, or up to 250 in data sharing the same location and options. A location narrows the match, and APN formatting is normalized automatically. Returns the property details; with contact_audience=owners it also returns the owners with their names, phones (with DNC flags) and emails. Contacts are left out unless contact_audience is set. Needs a connected DealMachine account with paid access. Each matched property costs one property credit and returned contacts cost people credits.

输入参数apndatafieldslocationcontact_audience

dealmachine_enrich_email

Enrich Person by Email

Looks up a person by email address (email, required). Returns their name, contact information including phones and emails, and demographics; include_properties=true adds the properties associated with them. Needs a connected DealMachine account with paid access. Each matched person costs one people credit and each included property one property credit; nothing is charged when no one matches.

输入参数email必填fieldslocationinclude_properties

dealmachine_enrich_phone

Enrich Person by Phone

Looks up a person by phone number (phone, required). Returns their name, contact information including phones and emails, and demographics; include_properties=true adds the properties associated with them. Needs a connected DealMachine account with paid access. Each matched person costs one people credit and each included property one property credit; nothing is charged when no one matches.

输入参数phone必填fieldslocationinclude_properties

dealmachine_enrich_name

Enrich People by Name

Finds people by name: one last_name, optionally with first_name and middle_initial, or up to 250 names in data sharing location, pagination and options. A location narrows the match. Returns paginated people with contact information including phones and emails; include_properties=true adds the properties associated with them. `estimate_cost=true` returns people and associated-property counts without records or credit use. Needs a connected DealMachine account with paid access. Each returned person costs one people credit and associated properties cost property credits; batching reduces requests, not credits.

输入参数datapagefieldslocationper_pagelast_namefirst_nameestimate_costmiddle_initialinclude_properties

dealmachine_filters

List DealMachine Search Filters

Returns DealMachine search filters with filter IDs, source types, operators, and valid options. A `search` value performs a fuzzy concept match across labels, aliases, and option values; without it, the response includes all pages. This read-only request is free of data credit charges, but an uncached read counts toward the API request limit. Reuse these definitions for subsequent lookups; identical requests are cached for 15 minutes.

输入参数searchgroup_idsource_type

dealmachine_fields

List DealMachine Data Fields

Returns available DealMachine data fields with field ID, source type, data type, and description. A `search` value performs a fuzzy match across field metadata; without it, the response includes all pages. This read-only request is free of data credit charges, but an uncached read counts toward the API request limit. Reuse these definitions for subsequent lookups; identical requests are cached for 15 minutes.

输入参数searchgroup_idsource_type

dealmachine_usage

View DealMachine Credit Usage

Returns live credit usage for the current billing cycle, including the total cap, spendable balance, monthly and additional pools, and usage by entity type. This read-only request is free.

无需输入参数。

dealmachine_whoami

Check DealMachine Authentication

Returns whether the current credential is valid, the active organization name, and the authentication type. This read-only request is free.

无需输入参数。

dealmachine_property_count

Count Matching Properties

Counts properties matching locations (required) and filters, such as is_corporate_owned for corporation, LLC or business owners, or with anchor=people their matching contacts. Use the same anchor, contact_audience and require_phone as the search. Needs a connected DealMachine account; counting consumes no credits.

输入参数anchorfilterslocations必填require_phonecontact_audience

dealmachine_property_export

Export Property Owner Leads

Creates a downloadable CSV of properties or property-owner contacts matching locations and filters. Defaults to owner contact rows (`contact_audience=owners`, `anchor=person`) with names, phones, emails, and property addresses. `contact_audience=none` or `anchor=property` produces property rows without contacts. Exported records can consume credits.

输入参数limitanchorfieldsfilterslocations必填scrub_dncmobile_onlylandline_onlyrequire_emailrequire_phonecontact_audienceactive_phones_only

dealmachine_property_get

Get Property Details

Returns one property by DealMachine property ID (id, required), with its owners and their names, phones and emails by default. `contact_audience=none` returns property-only data. Needs a connected DealMachine account with paid access. Enriched data costs one property credit unless `enrich=false`; owner contacts cost people credits.

输入参数id必填enrichfieldscontact_audience

dealmachine_property_get_many

Get Multiple Properties

Returns up to 25 properties by DealMachine property ID (ids, required), with their owners and their names, phones and emails by default. `contact_audience=none` returns property-only data. Needs a connected DealMachine account with paid access. Owner contacts cost people credits; same-cycle repeats are free.

输入参数ids必填enrichcontact_audience

dealmachine_comps

Find Comparable Properties

Find comparable sales + active listings for up to 25 subject properties. Costs 1 property data credit per subject found. Location/criteria optional (sensible defaults).

输入参数criterialocationproperty_ids必填

dealmachine_people_count

Count Matching People

Count matching people without consuming credits. Filters use the people catalog.

输入参数filterslocations必填

dealmachine_people_get

Get Person Details

Returns one person by DealMachine person ID (id, required), with their name, phones, emails, optional extended fields and associated properties. Needs a connected DealMachine account with paid access. The person costs one people credit; chargeable property fields or associated properties can consume property credits.

输入参数id必填fieldsproperty_limitinclude_properties

dealmachine_people_get_many

Get Multiple People

Returns up to 250 people by DealMachine person ID (ids, required), with their names, phones, emails, optional extended fields and associated properties. Needs a connected DealMachine account with paid access. Each found person costs one people credit; chargeable property fields or associated properties can consume property credits.

输入参数ids必填fieldsproperty_limitinclude_properties

dealmachine_delete_lists_list_id

Delete list

Delete list. Delete a list and all its items. This action cannot be undone. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_delete_lists_list_id_items

Remove items from list

Remove items from list. Remove specific property or person IDs from a list. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_delete_mail_designs_id

Delete design

Delete design. Delete a design. Designs used in active campaigns cannot be deleted. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_delete_mail_return_addresses_id

Delete return address

Delete return address. Delete a return address. The default return address cannot be deleted — set another as default first. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_delete_prospects_id

Remove prospect

Remove prospect. Archive the prospect and end its mail. Its notes, files, and activity are kept; it can be added again later. Pass `?cascade=false` to keep its list memberships and open opportunities. Mail always ends. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填queryconfirmed

dealmachine_delete_prospects_id_files_file_id

Delete prospect file

Delete prospect file. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_delete_prospects_id_notes_note_id

Delete prospect note

Delete prospect note. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_delete_prospects_id_photos_photo_id

Delete prospect photo

Delete prospect photo. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_delete_prospects_id_tags_tag_id

Remove tag from prospect

Remove tag from prospect. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_delete_tags_id

Delete tag

Delete tag. Delete a workspace tag. Returns 409 while prospects still carry it unless `force=true`, which removes it from them first. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填queryconfirmed

dealmachine_delete_tasks_id

Delete task

Delete task. Delete a task. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_delete_webhooks_id

Delete webhook

Delete webhook. Removes the webhook and its delivery log. Nothing more is sent to the URL. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_get_activity_activity_id

Get activity

Get activity. Retrieve the full details of a specific activity record, including the complete original request parameters and paginated entity IDs. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_addresses_autocomplete

Autocomplete property addresses

Autocomplete property addresses. Return fast, bounded street-address suggestions from DealMachine property data. Every suggestion includes a DealMachine property ID and may include a normalized city or county location. Retrieves data without changing records or spending credits.

输入参数query必填

dealmachine_get_driving_drives

List drives

List drives. List recorded drives for the workspace. Each drive reports how many prospects were added. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_driving_drives_id

Get drive

Get drive. Get a recorded drive with its route, events, visits, and links to prospects added during it. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_exports

List exports

List exports. List past exports for your organization with optional pagination and status filtering. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_exports_exportId

Get export by ID

Get export by ID. Retrieve a single export by its ID. Only exports belonging to your organization are accessible. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_lists

List all lists

List all lists. List all saved lists for your organization with pagination, search, filtering, and sorting. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_lists_list_id

Get list by ID

Get list by ID. Retrieve a list by its ID including build status, progress, and total count. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_lists_list_id_items

Get list items

Get list items. Retrieve paginated items in a list. Retrieves data without changing records or spending credits.

输入参数path必填query

dealmachine_get_locations_locationId

Get location

Get location. Retrieve a specific location by its ID. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_mail_analytics_summary

Get mail analytics summary

Get mail analytics summary. Get account-wide mail analytics: totals across all campaigns (sent, delivered, failed, opens, unique openers, average open rate) plus a paginated list of campaigns with per-campaign engagement. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_mail_analytics_timeseries

Get mail analytics time series

Get mail analytics time series. Get an account-wide time series for a single metric — sent, delivered, scans (QR/link views), or open_rate — bucketed by day or week. Missing buckets are filled with zeroes so the series is continuous. For "scans", each point also includes secondary_value (total scans vs unique properties). Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_mail_campaigns

List campaigns

List campaigns. List mail campaigns for your organization with optional filtering. Each campaign has one of six statuses: draft, ready, active, paused, ended or archived. Use accepting_properties=true to list the campaigns properties can be added to now. Archived campaigns are excluded unless status=archived is supplied. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_mail_campaigns_id

Get campaign

Get campaign. Get a single campaign by ID with steps. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_mail_campaigns_id_analytics

Campaign analytics

Campaign analytics. Get delivery and engagement analytics for a campaign. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_mail_campaigns_id_cost_estimate

Estimate campaign cost

Estimate campaign cost. Get a cost estimate for launching a campaign, including wallet balance check. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_mail_campaigns_id_properties_estimate

Estimate adding properties

Estimate adding properties. What adding a number of properties to the campaign would cost: the charge due today, the amount charged later as later pieces go out, and whether your wallet or auto-reload covers it. Nothing is added or charged. The count is an upper bound; properties skipped when you add them are not charged. For a paused campaign the charge due today is 0 and charged_on_resume is true: each piece is charged as it goes out after the campaign resumes. Retrieves data without changing records or spending credits.

输入参数path必填query必填

dealmachine_get_mail_campaigns_id_recipients

List campaign recipients

List campaign recipients. List recipients enrolled in a campaign with their delivery status. Retrieves data without changing records or spending credits.

输入参数path必填query

dealmachine_get_mail_designs

List designs

List designs. List mail designs for your organization. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_mail_designs_id

Get design

Get design. Get a single design by ID, including HTML content. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_mail_return_addresses

List return addresses

List return addresses. List all return addresses for your organization. Default address is listed first. Retrieves data without changing records or spending credits.

无需输入参数。

dealmachine_get_mail_return_addresses_id

Get return address

Get return address. Get a single return address by ID. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_mail_settings

Get mail settings

Get mail settings. Get the organization-level mail settings that act as defaults for new campaigns — default postcard size, sender name, contact frequency limit, QR code URL, and signature image. Retrieves data without changing records or spending credits.

无需输入参数。

dealmachine_get_mail_wallet_balance

Get wallet balance

Get wallet balance. Get the current wallet balance, including pending charges and auto-reload settings. Retrieves data without changing records or spending credits.

无需输入参数。

dealmachine_get_mail_wallet_pricing

Get mail pricing

Get mail pricing. Get postcard pricing for your plan. Prices are in cents per postcard. Retrieves data without changing records or spending credits.

无需输入参数。

dealmachine_get_mail_wallet_transactions

List wallet transactions

List wallet transactions. List wallet transaction history with optional filtering. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_prospects_id_activity

List prospect activity

List prospect activity. Everything that happened to the prospect’s record in this workspace, newest first: prospect changes, notes, tags, files, lists, mail, and CRM events. Retrieves data without changing records or spending credits.

输入参数path必填query

dealmachine_get_prospects_id_files

List prospect files

List prospect files. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_prospects_id_files_file_id_download

Download prospect file

Download prospect file. Redirects to a 5-minute signed URL. Pass `?redirect=false` to get the URL as JSON instead. Retrieves data without changing records or spending credits.

输入参数path必填query

dealmachine_get_prospects_id_notes

List prospect notes

List prospect notes. Notes on the prospect, newest first. Retrieves data without changing records or spending credits.

输入参数path必填query

dealmachine_get_prospects_id_notes_note_id

Get prospect note

Get prospect note. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_prospects_id_photos

List prospect photos

List prospect photos. Photos of the prospect’s property, newest first. Property prospects only. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_prospects_id_tags

List prospect tags

List prospect tags. The tag catalog with an `assigned` flag for this prospect. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_prospects_by_record

Get prospect by record

Get prospect by record. Look up the prospect that tracks a property, person, or company, if there is one. Retrieves data without changing records or spending credits.

输入参数query必填

dealmachine_get_prospects_counts

Count prospects

Count prospects. Prospect counts by lifecycle and record type, for the workspace or one list. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_subscription

Get subscription status

Get subscription status. Get your current subscription status, including plan details, billing cycle, and credit caps. Retrieves data without changing records or spending credits.

无需输入参数。

dealmachine_get_tags_id

Get tag

Get tag. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_tasks

List tasks

List tasks. List all tasks for the organization. Optionally filter by status, search, or assignee. Retrieves data without changing records or spending credits.

输入参数query

dealmachine_get_tasks_id

Get task

Get task. Get a single task by ID. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_webhooks_id

Get webhook

Get webhook. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_webhooks_id_deliveries

List webhook deliveries

List webhook deliveries. The delivery log for one webhook, newest first: status, attempts, response code and time, and any error. Retrieves data without changing records or spending credits.

输入参数path必填query

dealmachine_get_webhooks_id_deliveries_delivery_id

Get webhook delivery

Get webhook delivery. One delivery with the full event body that was (or will be) sent. Retrieves data without changing records or spending credits.

输入参数path必填

dealmachine_get_webhooks_events

List webhook event types

List webhook event types. Every event a webhook can subscribe to, with a description and a full example request body. Retrieves data without changing records or spending credits.

无需输入参数。

dealmachine_patch_lists_list_id

Update list

Update list. Update the name of a list. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_patch_mail_campaigns_id

Update campaign

Update campaign. Update a draft campaign. Only draft campaigns can be updated. Audience updates must use exactly one of property_ids, contact_ids, or list_ids. Sending steps replaces the whole step set, so include every step you want to keep. To add properties to a ready, active or paused campaign, use POST /campaigns/{id}/properties. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_patch_mail_designs_id

Update design

Update design. Update a design. Supplied HTML is validated before saving. Publishing revalidates both effective draft sides and requires complete front and back HTML. Custom HTML with one outer div declaring inline width and height: 4x6 = 1800 x 1200, 6x9 = 2700 x 1800, 6x11 = 3300 x 1800 CSS pixels. Use inline styles only. Stylesheets, scripts, SVG and embedded documents are unsupported. Put spacing, borders and layout inside the outer div; root transforms, margins and padding are unsupported. Each side must be nonempty and at most 2 MB. Invalid or ambiguous canvases return 400 VALIDATION_ERROR before saving. The API parses and sanitizes HTML without running a browser. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_patch_mail_return_addresses_id

Update return address

Update return address. Update a return address. If address fields change, the new address is re-validated via USPS. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_patch_mail_settings

Update mail settings

Update mail settings. Update one or more organization-level mail settings. Only the fields you include are changed; omitted fields are left untouched. Pass null to clear a setting back to its default. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodyconfirmed

dealmachine_patch_prospects

Move prospects in bulk

Move prospects in bulk. Move the prospects for up to 1,000 records between active, opportunity, and archived in one call: the bulk form of the single update, and what the app’s selection action bar runs. Records that are not prospects are skipped, as are prospects already in the requested lifecycle; the response counts each. Archiving always ends each prospect’s mail and, unless `cascade` is false, closes its open opportunities. List memberships are kept either way. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodyconfirmed

dealmachine_patch_prospects_id_notes_note_id

Edit prospect note

Edit prospect note. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_patch_tags_id

Update tag

Update tag. Rename, describe, recolor, reorder, or archive a workspace tag. Built-in tags return 403. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_patch_tasks_id

Update task

Update task. Update a task. Set `is_completed` to `true` to mark as done. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_patch_webhooks_id

Update webhook

Update webhook. Change the URL, events, batch size, contact opt-in, or turn the webhook on or off. Re-enabling clears its failure count. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_post_activity_search

Search activity

Search activity. Query your past searches, enrichments, and exports. Filter by activity type, date range, or specific entity IDs — or use free-text search. This endpoint does not consume credits. Retrieves data without changing records or spending credits. Requires confirmed=true for this request.

输入参数body必填confirmed

dealmachine_post_addresses_validate

Validate addresses

Validate addresses. Validate and standardize US addresses using USPS address data. Returns USPS-standardized versions of each submitted address along with a validation status indicating whether the address is deliverable. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数body必填confirmed

dealmachine_post_enrichment_reverse_geocode

Reverse geocode

Reverse geocode. Look up properties by latitude/longitude coordinates (reverse geocoding). Returns the closest property within 300 feet. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数body必填confirmed

dealmachine_post_lists_list_id_build

Build list from search filters

Build list from search filters. Add the records matching the given filters and locations to this list. Records already on the list stay, so building again adds to it. Runs asynchronously: the response is this list with status `building`; poll `GET /v1/lists/{list_id}` until status is `completed`. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_post_lists_list_id_export

Export list

Export list. Export all items from a completed list. The list must have status "completed" before export. Credits are charged per record. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_post_lists_list_id_import

Import IDs into list

Import IDs into list. Add property or person ids to this list, matching the list's source_type. Records already on the list stay, so importing again adds to it. Runs asynchronously: the response is this list with status `building`; poll `GET /v1/lists/{list_id}` until status is `completed`. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_post_mail_campaigns

Create campaign

Create campaign. Create a new mail campaign. Each step can reference an existing design or provide a design_prompt to generate one; designs are HTML, so generation is instant (no polling required). Provide at most one audience type: property IDs, contact IDs, or saved list IDs. With an audience, set launch=true to send immediately, or leave it as a draft and call POST /campaigns/{id}/send later. Set accepts_properties=true to keep adding properties with POST /campaigns/{id}/properties after it starts; without it the campaign works as before and ends when its mail is done. Without an audience, the campaign is saved as ready with no properties and no charge, and it accepts properties: add them any time with POST /campaigns/{id}/properties. Saving as ready needs a name that does not start with "Draft - " and a design on every step. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodyconfirmed

dealmachine_post_mail_campaigns_id_pause

Pause campaign

Pause campaign. Pause an active campaign, or a ready campaign that accepts properties. Properties added while it is paused wait at step 1 until it is resumed. Mail already submitted to the vendor will still be delivered. An ended campaign cannot be paused. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_post_mail_campaigns_id_resume

Resume campaign

Resume campaign. Resume a paused campaign. An ended campaign cannot be resumed. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_post_mail_designs

Create design

Create design. Create a mail design from custom HTML, or save a prompt as a draft. Custom HTML with one outer div declaring inline width and height: 4x6 = 1800 x 1200, 6x9 = 2700 x 1800, 6x11 = 3300 x 1800 CSS pixels. Use inline styles only. Stylesheets, scripts, SVG and embedded documents are unsupported. Put spacing, borders and layout inside the outer div; root transforms, margins and padding are unsupported. Each side must be nonempty and at most 2 MB. Invalid or ambiguous canvases return 400 VALIDATION_ERROR before saving. The API parses and sanitizes HTML without running a browser. Publishing requires complete validated front and back HTML. Prompt-only designs cannot be auto-published. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodyconfirmed

dealmachine_post_mail_return_addresses

Create return address

Create return address. Create a new return address. The address is validated via USPS before saving. If the address is invalid, the request is rejected. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodyconfirmed

dealmachine_post_mail_return_addresses_id_default

Set default return address

Set default return address. Set a return address as the default for your organization. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_post_people_export

Export people to CSV

Export people to CSV. Export matching people as a CSV file. Returns signed download URLs. Limited to 1,000,000 records per export. Pass limit to export only the first N matching records. The request is synchronous — the response is returned once the export is complete (typically up to 30 seconds). Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数body必填confirmed

dealmachine_post_phones_dnc

Check DNC status

Check DNC status. Check Do Not Call (DNC) registry status and phone type for an array of phone numbers. Returns DNC status and phone type without performing a full person enrichment. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数body必填confirmed

dealmachine_post_prospects_id_files

Register uploaded file

Register uploaded file. Step two: after the PUT succeeds, record the file on the prospect. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_post_prospects_id_files_upload_url

Get file upload URL

Get file upload URL. Step one of attaching a file: returns a presigned URL to PUT the bytes to (valid 5 minutes, max 25 MB) and the `s3_key` to register afterwards with `POST /files`. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_post_prospects_id_photos

Add prospect photo

Add prospect photo. Attach a photo to the prospect’s property from base64 (small images) or a public https URL (up to 10 MB). Needs an API key created by a user. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodypath必填confirmed

dealmachine_post_prospects_id_tags_tag_id

Add tag to prospect

Add tag to prospect. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_post_prospects_check

Check prospect state

Check prospect state. For up to 500 record IDs, say which are prospects and where they are. Use it to avoid duplicate adds. Retrieves data without changing records or spending credits. Requires confirmed=true for this request.

输入参数bodyconfirmed

dealmachine_post_tags

Create tag

Create tag. Add a workspace tag. Names are unique per workspace and cannot reuse a built-in tag’s name. Up to 200 tags per workspace. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodyconfirmed

dealmachine_post_tags_reorder

Reorder tags

Reorder tags. Set the display order of workspace tags. IDs not listed keep their order after the listed ones. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodyconfirmed

dealmachine_post_tasks

Create task

Create task. Create a new task. Optionally link it to an opportunity, property, or person. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数bodyconfirmed

dealmachine_post_webhooks_id_deliveries_delivery_id_redeliver

Redeliver

Redeliver. Queue one delivery to be sent again. Pass `delivery_id=all` with `since` to requeue every delivery after a time. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填queryconfirmed

dealmachine_post_webhooks_id_rotate_secret

Rotate webhook secret

Rotate webhook secret. Issue a new signing secret. The old one keeps validating signatures for 24 hours so your consumer can switch over. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_post_webhooks_id_test

Send test event

Send test event. Sends one `ping` event to the URL right now, signed like a real delivery, and returns what came back. Requires user approval and confirmed=true before changes or credit use. Writes are never retried automatically.

输入参数path必填confirmed

dealmachine_list_create

Create DealMachine List

Creates a list in the workspace, optionally pre-filled with up to 250 property or person IDs. Filed records become prospects unless `add_as_prospects` is false. Free; no credits are charged.

输入参数name必填record_idssource_typeadd_as_prospects

dealmachine_list_add_items

Add Records to DealMachine List

Adds property or person IDs to an existing list (max 10,000 per request; duplicates are skipped). Filed records become prospects unless `add_as_prospects` is false. Free; no credits are charged.

输入参数ids必填id_typelist_id必填add_as_prospects

dealmachine_prospect_add

Add DealMachine Prospects

Tracks one record or up to 1,000 records as prospects in the workspace. Records that are prospects already are returned unchanged; archived ones come back to active. Free; no credits are charged.

输入参数favoriterecord_ids必填record_type

dealmachine_prospect_get

Get DealMachine Prospect

Returns one prospect by prospect ID, or by the record it tracks, with its lifecycle, status (Hot, Warm, Cold, Follow up, Do Not Contact; read only), tags, and note and file counts. Free.

输入参数record_idprospect_idrecord_type

dealmachine_prospect_update

Update DealMachine Prospect

Moves a prospect between active, opportunity, and archived, or stars it. Archiving ends its mail. With cascade enabled, it also closes open opportunities. List memberships are kept either way. Free.

输入参数cascadefavoritelifecycleprospect_id必填

dealmachine_prospect_note_add

Add DealMachine Prospect Note

Adds a note (up to 10,000 characters) to a prospect. Free.

输入参数body必填prospect_id必填

dealmachine_prospect_tags_set

Set DealMachine Prospect Tags

Replaces the tags on a prospect with exactly the given tag IDs; an empty list clears them. Free.

输入参数tag_ids必填prospect_id必填

dealmachine_tags_list

List DealMachine Tags

Lists the prospect tag catalog: the built-in tags every workspace has plus the workspace’s own, with how many prospects carry each. Free.

输入参数include_inactive

dealmachine_mail_campaign_send

Send Mail Campaign

Launches a draft mail campaign and spends wallet dollars for its recipients and scheduled steps.

输入参数confirmed必填campaign_id必填

dealmachine_mail_campaign_add_properties

Add Properties to Mail Campaign

Adds properties to a Ready, Active or Paused campaign and spends wallet dollars. Each added property starts at step 1 on its own schedule; properties already in the campaign are untouched. Before calling this, call dealmachine_mail_read with operation add_properties_estimate and the property count, tell the user the charge due today (pay_today_cents) and the amount charged later as mail goes out (pay_later_cents), and get their approval. A paused campaign charges nothing today; each piece is charged as it goes out after it resumes (charged_on_resume). Auto-reload must be on when the campaign has more than one step, a repeating step, or any delay. The response lists added_count and each skipped property with its reason: already_in_campaign, do_not_contact, no_mailing_address, duplicate_mailing_address, archived_prospect or not_found. Find campaigns that accept properties with dealmachine_mail_read search_campaigns and accepting_properties=true.

输入参数confirmed必填recipient必填campaign_id必填property_ids必填

dealmachine_mail_campaign_archive

Archive Mail Campaign

Archives an ended campaign. End active, paused, ready or draft campaigns first; otherwise the API returns 409 CAMPAIGN_NOT_ENDED without changing the campaign. Cancels unsent mail, releases reservations, stops reminders and hides it from default lists. History stays under status=archived. Already submitted mail may still ship. Confirm with the user first.

输入参数confirmed必填campaign_id必填

dealmachine_mail_campaign_end

End Mail Campaign

Ends a Ready, Active or Paused mail campaign permanently. Unsent mail is stopped, no properties can be added, and it can never be resumed. Mail already printed or with the carrier still delivers. To reuse its steps, create a new campaign. A draft has not started and cannot be ended (campaign_is_draft). Warn the user that ending cannot be undone.

输入参数confirmed必填campaign_id必填

dealmachine_mail_campaign_cancel

Cancel Mail Campaign

Cancels a mail campaign, kept for existing clients. A started campaign ends as with dealmachine_mail_campaign_end; a draft is cancelled; a campaign that has already ended is returned unchanged. Unsent mail stops, while mail already submitted still delivers.

输入参数confirmed必填campaign_id必填

dealmachine_webhook_list

List DealMachine Webhooks

Lists the workspace’s outbound webhooks with their event types and delivery health, plus the catalog of event types when asked. Free.

输入参数include_events

dealmachine_webhook_create

Create DealMachine Webhook

Registers an https URL to receive prospect and list events. Returns the signing secret once; relay it to the user. Free.

输入参数url必填batch_maxdescriptionevent_types必填include_contacts

版本历史

2
  1. v0.3.1最新Nov 4, 2026
  2. v0.3.0Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Deal 集成