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.