or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

additional-streams.mdauthentication.mdcrm-streams.mdcustom-objects.mdengagements.mdindex.mdmarketing.mdproperty-history.md

crm-streams.mddocs/

0

# CRM Streams

1

2

Core customer relationship management data streams including contacts, companies, deals, and tickets with full incremental synchronization support and property associations.

3

4

## Capabilities

5

6

### Contacts Stream

7

8

Contact records with properties, associations, and incremental sync support.

9

10

```yaml { .api }

11

contacts:

12

primary_key: ["id"]

13

cursor_field: "updatedAt"

14

sync_mode: incremental

15

schema:

16

type: object

17

properties:

18

id:

19

type: string

20

description: "Unique contact identifier"

21

createdAt:

22

type: string

23

format: date-time

24

description: "Contact creation timestamp"

25

updatedAt:

26

type: string

27

format: date-time

28

description: "Last update timestamp"

29

archived:

30

type: boolean

31

description: "Whether contact is archived"

32

properties:

33

type: object

34

description: "Dynamic contact properties"

35

additionalProperties: true

36

# Flattened association fields

37

companies:

38

type: array

39

items:

40

type: string

41

description: "Associated company IDs"

42

deals:

43

type: array

44

items:

45

type: string

46

description: "Associated deal IDs"

47

```

48

49

**Usage Example:**

50

51

```yaml

52

streams:

53

- name: contacts

54

sync_mode: incremental

55

cursor_field: ["updatedAt"]

56

destination_sync_mode: append_dedup

57

```

58

59

### Companies Stream

60

61

Company records with properties, associations, and incremental sync support.

62

63

```yaml { .api }

64

companies:

65

primary_key: ["id"]

66

cursor_field: "updatedAt"

67

sync_mode: incremental

68

schema:

69

type: object

70

properties:

71

id:

72

type: string

73

description: "Unique company identifier"

74

createdAt:

75

type: string

76

format: date-time

77

description: "Company creation timestamp"

78

updatedAt:

79

type: string

80

format: date-time

81

description: "Last update timestamp"

82

archived:

83

type: boolean

84

description: "Whether company is archived"

85

properties:

86

type: object

87

description: "Dynamic company properties"

88

additionalProperties: true

89

# Flattened association fields

90

contacts:

91

type: array

92

items:

93

type: string

94

description: "Associated contact IDs"

95

deals:

96

type: array

97

items:

98

type: string

99

description: "Associated deal IDs"

100

```

101

102

### Deals Stream

103

104

Deal records with properties, associations, and incremental sync support.

105

106

```yaml { .api }

107

deals:

108

primary_key: ["id"]

109

cursor_field: "updatedAt"

110

sync_mode: incremental

111

schema:

112

type: object

113

properties:

114

id:

115

type: string

116

description: "Unique deal identifier"

117

createdAt:

118

type: string

119

format: date-time

120

description: "Deal creation timestamp"

121

updatedAt:

122

type: string

123

format: date-time

124

description: "Last update timestamp"

125

archived:

126

type: boolean

127

description: "Whether deal is archived"

128

properties:

129

type: object

130

description: "Dynamic deal properties"

131

additionalProperties: true

132

# Flattened association fields

133

contacts:

134

type: array

135

items:

136

type: string

137

description: "Associated contact IDs"

138

companies:

139

type: array

140

items:

141

type: string

142

description: "Associated company IDs"

143

line_items:

144

type: array

145

items:

146

type: string

147

description: "Associated line item IDs"

148

```

149

150

### Deals Archived Stream

151

152

Archived deal records for comprehensive deal lifecycle tracking.

153

154

```yaml { .api }

155

deals_archived:

156

primary_key: ["id"]

157

cursor_field: "archivedAt"

158

sync_mode: incremental

159

schema:

160

type: object

161

properties:

162

id:

163

type: string

164

description: "Unique deal identifier"

165

createdAt:

166

type: string

167

format: date-time

168

description: "Deal creation timestamp"

169

updatedAt:

170

type: string

171

format: date-time

172

description: "Last update timestamp"

173

archivedAt:

174

type: string

175

format: date-time

176

description: "Archive timestamp"

177

archived:

178

type: boolean

179

const: true

180

description: "Always true for archived deals"

181

properties:

182

type: object

183

description: "Dynamic deal properties at time of archival"

184

additionalProperties: true

185

```

186

187

### Tickets Stream

188

189

Support ticket records with properties and incremental sync support.

190

191

```yaml { .api }

192

tickets:

193

primary_key: ["id"]

194

cursor_field: "updatedAt"

195

sync_mode: incremental

196

schema:

197

type: object

198

properties:

199

id:

200

type: string

201

description: "Unique ticket identifier"

202

createdAt:

203

type: string

204

format: date-time

205

description: "Ticket creation timestamp"

206

updatedAt:

207

type: string

208

format: date-time

209

description: "Last update timestamp"

210

archived:

211

type: boolean

212

description: "Whether ticket is archived"

213

properties:

214

type: object

215

description: "Dynamic ticket properties"

216

additionalProperties: true

217

# Flattened association fields

218

contacts:

219

type: array

220

items:

221

type: string

222

description: "Associated contact IDs"

223

companies:

224

type: array

225

items:

226

type: string

227

description: "Associated company IDs"

228

```

229

230

### Deal Splits Stream

231

232

Deal commission split records for revenue tracking.

233

234

```yaml { .api }

235

deal_splits:

236

primary_key: ["id"]

237

cursor_field: "updatedAt"

238

sync_mode: incremental

239

schema:

240

type: object

241

properties:

242

id:

243

type: string

244

description: "Unique deal split identifier"

245

dealId:

246

type: string

247

description: "Associated deal ID"

248

ownerId:

249

type: string

250

description: "Owner receiving split"

251

percentage:

252

type: number

253

description: "Split percentage (0-100)"

254

updatedAt:

255

type: string

256

format: date-time

257

description: "Last update timestamp"

258

```

259

260

### Leads Stream

261

262

Lead records for tracking potential customers.

263

264

```yaml { .api }

265

leads:

266

primary_key: ["id"]

267

cursor_field: "updatedAt"

268

sync_mode: incremental

269

schema:

270

type: object

271

properties:

272

id:

273

type: string

274

description: "Unique lead identifier"

275

createdAt:

276

type: string

277

format: date-time

278

description: "Lead creation timestamp"

279

updatedAt:

280

type: string

281

format: date-time

282

description: "Last update timestamp"

283

properties:

284

type: object

285

description: "Dynamic lead properties"

286

additionalProperties: true

287

```

288

289

### Line Items Stream

290

291

E-commerce line item records associated with deals.

292

293

```yaml { .api }

294

line_items:

295

primary_key: ["id"]

296

cursor_field: "updatedAt"

297

sync_mode: incremental

298

schema:

299

type: object

300

properties:

301

id:

302

type: string

303

description: "Unique line item identifier"

304

createdAt:

305

type: string

306

format: date-time

307

description: "Line item creation timestamp"

308

updatedAt:

309

type: string

310

format: date-time

311

description: "Last update timestamp"

312

properties:

313

type: object

314

description: "Dynamic line item properties"

315

additionalProperties: true

316

# Flattened association fields

317

deals:

318

type: array

319

items:

320

type: string

321

description: "Associated deal IDs"

322

```

323

324

### Products Stream

325

326

Product catalog records for e-commerce functionality.

327

328

```yaml { .api }

329

products:

330

primary_key: ["id"]

331

cursor_field: "updatedAt"

332

sync_mode: incremental

333

schema:

334

type: object

335

properties:

336

id:

337

type: string

338

description: "Unique product identifier"

339

createdAt:

340

type: string

341

format: date-time

342

description: "Product creation timestamp"

343

updatedAt:

344

type: string

345

format: date-time

346

description: "Last update timestamp"

347

archived:

348

type: boolean

349

description: "Whether product is archived"

350

properties:

351

type: object

352

description: "Dynamic product properties"

353

additionalProperties: true

354

```

355

356

### Owners Stream

357

358

User/owner records for assignment tracking and reporting.

359

360

```yaml { .api }

361

owners:

362

primary_key: ["id"]

363

cursor_field: "updatedAt"

364

sync_mode: incremental

365

schema:

366

type: object

367

properties:

368

id:

369

type: string

370

description: "Unique owner identifier"

371

userId:

372

type: string

373

description: "User ID"

374

email:

375

type: string

376

format: email

377

description: "Owner email address"

378

firstName:

379

type: string

380

description: "Owner first name"

381

lastName:

382

type: string

383

description: "Owner last name"

384

active:

385

type: boolean

386

description: "Whether owner is active"

387

updatedAt:

388

type: string

389

format: date-time

390

description: "Last update timestamp"

391

```

392

393

### Owners Archived Stream

394

395

Archived owner records for historical assignment tracking.

396

397

```yaml { .api }

398

owners_archived:

399

primary_key: ["id"]

400

cursor_field: "updatedAt"

401

sync_mode: incremental

402

schema:

403

type: object

404

properties:

405

id:

406

type: string

407

description: "Unique owner identifier"

408

userId:

409

type: string

410

description: "User ID"

411

email:

412

type: string

413

format: email

414

description: "Owner email address"

415

firstName:

416

type: string

417

description: "Owner first name"

418

lastName:

419

type: string

420

description: "Owner last name"

421

active:

422

type: boolean

423

const: false

424

description: "Always false for archived owners"

425

updatedAt:

426

type: string

427

format: date-time

428

description: "Last update timestamp"

429

```

430

431

### Goals Stream

432

433

Goal tracking records for performance monitoring and targets.

434

435

```yaml { .api }

436

goals:

437

primary_key: ["id"]

438

cursor_field: "updatedAt"

439

sync_mode: incremental

440

schema:

441

type: object

442

properties:

443

id:

444

type: string

445

description: "Unique goal identifier"

446

name:

447

type: string

448

description: "Goal name"

449

createdAt:

450

type: string

451

format: date-time

452

description: "Goal creation timestamp"

453

updatedAt:

454

type: string

455

format: date-time

456

description: "Last update timestamp"

457

properties:

458

type: object

459

description: "Dynamic goal properties"

460

additionalProperties: true

461

```

462

463

### Pipeline Configuration Streams

464

465

Pipeline configuration for deals and tickets.

466

467

```yaml { .api }

468

deal_pipelines:

469

primary_key: ["id"]

470

sync_mode: full_refresh

471

schema:

472

type: object

473

properties:

474

id:

475

type: string

476

description: "Unique pipeline identifier"

477

label:

478

type: string

479

description: "Pipeline display name"

480

stages:

481

type: array

482

items:

483

type: object

484

properties:

485

id:

486

type: string

487

description: "Stage identifier"

488

label:

489

type: string

490

description: "Stage display name"

491

displayOrder:

492

type: integer

493

description: "Stage sort order"

494

495

ticket_pipelines:

496

primary_key: ["id"]

497

sync_mode: full_refresh

498

schema:

499

type: object

500

properties:

501

id:

502

type: string

503

description: "Unique pipeline identifier"

504

label:

505

type: string

506

description: "Pipeline display name"

507

stages:

508

type: array

509

items:

510

type: object

511

properties:

512

id:

513

type: string

514

description: "Stage identifier"

515

label:

516

type: string

517

description: "Stage display name"

518

displayOrder:

519

type: integer

520

description: "Stage sort order"

521

```

522

523

### Leads Stream

524

525

Lead records for tracking potential prospects and managing lead qualification processes.

526

527

```yaml { .api }

528

leads:

529

primary_key: ["id"]

530

cursor_field: "updatedAt"

531

sync_mode: incremental

532

schema:

533

type: object

534

properties:

535

id:

536

type: string

537

description: "Unique lead identifier"

538

createdAt:

539

type: string

540

format: date-time

541

description: "Lead creation timestamp"

542

updatedAt:

543

type: string

544

format: date-time

545

description: "Last update timestamp"

546

archived:

547

type: boolean

548

description: "Whether lead is archived"

549

properties:

550

type: object

551

description: "Dynamic lead properties"

552

additionalProperties: true

553

```

554

555

### Contact Lists Stream

556

557

Contact list records for managing contact segmentation and marketing campaigns.

558

559

```yaml { .api }

560

contact_lists:

561

primary_key: ["id"]

562

cursor_field: "updatedAt"

563

sync_mode: incremental

564

schema:

565

type: object

566

properties:

567

id:

568

type: string

569

description: "Unique contact list identifier"

570

name:

571

type: string

572

description: "Contact list name"

573

size:

574

type: integer

575

description: "Number of contacts in list"

576

createdAt:

577

type: string

578

format: date-time

579

description: "List creation timestamp"

580

updatedAt:

581

type: string

582

format: date-time

583

description: "Last update timestamp"

584

listType:

585

type: string

586

description: "Type of contact list (STATIC, DYNAMIC)"

587

```

588

589

### Deal Splits Stream

590

591

Deal commission split records for revenue tracking and sales team compensation.

592

593

```yaml { .api }

594

deal_splits:

595

primary_key: ["id"]

596

cursor_field: "updatedAt"

597

sync_mode: incremental

598

schema:

599

type: object

600

properties:

601

id:

602

type: string

603

description: "Unique deal split identifier"

604

dealId:

605

type: string

606

description: "Associated deal identifier"

607

ownerId:

608

type: string

609

description: "Owner responsible for this split"

610

percentage:

611

type: number

612

description: "Percentage of deal value (0-100)"

613

amount:

614

type: number

615

description: "Split amount in deal currency"

616

updatedAt:

617

type: string

618

format: date-time

619

description: "Last update timestamp"

620

```

621

622

## Property Mapping

623

624

All CRM streams support dynamic property mapping where HubSpot properties are accessible in two formats:

625

626

1. **Nested format**: Under `properties` object

627

2. **Flattened format**: As top-level fields prefixed with `properties_`

628

629

**Example:**

630

```json

631

{

632

"id": "12345",

633

"properties": {

634

"firstname": "John",

635

"lastname": "Doe",

636

"email": "john@example.com"

637

},

638

"properties_firstname": "John",

639

"properties_lastname": "Doe",

640

"properties_email": "john@example.com"

641

}

642

```

643

644

## Association Enrichment

645

646

CRM streams automatically include associated object IDs as flattened array fields:

647

648

- **contacts**: `companies`, `deals`

649

- **companies**: `contacts`, `deals`

650

- **deals**: `contacts`, `companies`, `line_items`

651

- **tickets**: `contacts`, `companies`

652

653

These associations are populated by querying HubSpot's CRM v4 associations API.