From 0afa024a7006ef45cd65aa280f2658e4b26d77ee Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 21:20:38 +0000 Subject: [PATCH 01/30] feat(mcp): add opt-in per-stream sync progress tracking to get_cloud_sync_status Add with_stream_progress boolean parameter to get_cloud_sync_status MCP tool. When enabled, fetches current connection state and catalog to compute estimated progress percentages for streams with datetime-based cursors. Core progress calculation logic lives in airbyte/cloud/_sync_progress.py (public module) with the MCP tool as a thin wrapper. Progress formula: (current_cursor - sync_start) / (now - sync_start) Only datetime-based cursors are supported; others are skipped gracefully. --- airbyte/cloud/_sync_progress.py | 230 ++++++++++++++++++++++++++++++++ airbyte/mcp/cloud.py | 23 ++++ 2 files changed, 253 insertions(+) create mode 100644 airbyte/cloud/_sync_progress.py diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py new file mode 100644 index 000000000..914a5cef4 --- /dev/null +++ b/airbyte/cloud/_sync_progress.py @@ -0,0 +1,230 @@ +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +"""Sync progress estimation for datetime-cursor-based incremental streams. + +This module provides functions to estimate per-stream sync progress by +comparing the current cursor value against the sync start time. The +progress formula is: + +``` +progress = (current_cursor - sync_start_cursor) / (now - sync_start_cursor) +``` + +Where: +- `current_cursor` is the latest committed cursor value (from state). +- `sync_start_cursor` is the cursor value at the start of the sync + (from the previous completed sync's final state, or from the current + state if no previous sync is available). +- `now` is the current UTC time (estimated sync completion point). + +Only streams with datetime-based cursors are supported. Non-datetime +cursors (integers, opaque tokens, etc.) are skipped. +""" + +from __future__ import annotations + +import logging +from datetime import datetime, timezone +from typing import Any + +from airbyte.cloud._connection_state import ( + ConnectionStateResponse, + StreamState, + _get_stream_list, +) + + +logger = logging.getLogger(__name__) + + +def _try_parse_datetime_cursor(value: str) -> datetime | None: + """Attempt to parse a string as a datetime. + + Tries ISO 8601 format first, then common datetime patterns. + Returns `None` if the value cannot be parsed as a datetime. + """ + # Fast rejection: if it looks like a pure integer or float, skip it + stripped = value.strip() + if not stripped: + return None + + try: + float(stripped) + except ValueError: + pass + else: + return None # It's a number, not a datetime + + # Try ISO 8601 parsing (handles most Airbyte cursor formats) + try: + dt = datetime.fromisoformat(stripped) + except (ValueError, TypeError): + pass + else: + # Ensure timezone-aware (assume UTC if naive) + if dt.tzinfo is None: + dt = dt.replace(tzinfo=timezone.utc) + return dt + + return None + + +def _extract_cursor_field_from_catalog( + catalog: dict[str, Any], + stream_name: str, + stream_namespace: str | None, +) -> str | None: + """Extract the cursor field name for a stream from the configured catalog. + + Returns the cursor field name, or `None` if the stream is not found + or does not have a cursor field configured. + """ + streams = catalog.get("streams", []) + for stream_entry in streams: + config = stream_entry.get("config", {}) + stream_info = stream_entry.get("stream", {}) + + entry_name = stream_info.get("name") or config.get("aliasName") + entry_namespace = stream_info.get("namespace") + + # Normalize namespace comparison (None and "" are equivalent) + if entry_name != stream_name: + continue + if (entry_namespace or None) != (stream_namespace or None): + continue + + # cursor_field is a list of field path segments (usually single element) + cursor_field = config.get("cursorField") + if cursor_field and isinstance(cursor_field, list) and len(cursor_field) > 0: + return str(cursor_field[0]) + + return None + + +def _find_cursor_value_in_state( + stream_state: dict[str, Any] | None, + cursor_field: str | None, +) -> str | None: + """Find a cursor value in a stream state blob. + + If `cursor_field` is provided, looks for it directly. Otherwise, + attempts common cursor field names and heuristics. + + Returns the cursor value as a string, or `None` if not found. + """ + if not stream_state: + return None + + # If we know the cursor field, look for it directly + if cursor_field and cursor_field in stream_state: + val = stream_state[cursor_field] + if val is not None: + return str(val) + + # Try common cursor field names as fallback + common_cursor_names = ["cursor", "updated_at", "date", "timestamp"] + for name in common_cursor_names: + if name in stream_state: + val = stream_state[name] + if val is not None: + return str(val) + + # Last resort: check for a single string value that parses as datetime + string_values = [str(v) for v in stream_state.values() if v is not None and isinstance(v, str)] + datetime_values = [(v, _try_parse_datetime_cursor(v)) for v in string_values] + parsed = [(v, dt) for v, dt in datetime_values if dt is not None] + if len(parsed) == 1: + return parsed[0][0] + + return None + + +def compute_stream_progress( + state_data: dict[str, Any], + catalog_data: dict[str, Any] | None, + sync_start_time: datetime, + now: datetime | None = None, +) -> list[dict[str, Any]]: + """Compute per-stream sync progress for datetime-cursor-based streams. + + Args: + state_data: The raw connection state dict (from `dump_raw_state()`). + catalog_data: The raw configured catalog dict (from `dump_raw_catalog()`), + or `None` if not available. + sync_start_time: The start time of the current sync job. + now: The current time (defaults to `datetime.now(timezone.utc)`). + + Returns: + A list of per-stream progress dicts, each containing: + - `stream_name`: The stream name. + - `stream_namespace`: The stream namespace (or `None`). + - `cursor_field`: The cursor field name (or `None` if unknown). + - `cursor_value`: The current cursor value string (or `None`). + - `progress_pct`: Estimated progress as a float 0.0-1.0 (or `None` + if progress cannot be calculated). + - `reason`: Human-readable explanation if progress cannot be calculated. + """ + if now is None: + now = datetime.now(timezone.utc) + + # Ensure times are timezone-aware + if sync_start_time.tzinfo is None: + sync_start_time = sync_start_time.replace(tzinfo=timezone.utc) + if now.tzinfo is None: + now = now.replace(tzinfo=timezone.utc) + + state = ConnectionStateResponse(**state_data) + streams: list[StreamState] = _get_stream_list(state) + + results: list[dict[str, Any]] = [] + for stream in streams: + stream_name = stream.stream_descriptor.name + stream_namespace = stream.stream_descriptor.namespace + + # Look up cursor field from catalog + cursor_field: str | None = None + if catalog_data: + cursor_field = _extract_cursor_field_from_catalog( + catalog_data, stream_name, stream_namespace + ) + + # Find cursor value in state + cursor_value_str = _find_cursor_value_in_state(stream.stream_state, cursor_field) + + entry: dict[str, Any] = { + "stream_name": stream_name, + "stream_namespace": stream_namespace, + "cursor_field": cursor_field, + "cursor_value": cursor_value_str, + "progress_pct": None, + "reason": None, + } + + if cursor_value_str is None: + entry["reason"] = "No cursor value found in state." + results.append(entry) + continue + + cursor_dt = _try_parse_datetime_cursor(cursor_value_str) + if cursor_dt is None: + entry["reason"] = ( + f"Cursor value '{cursor_value_str}' is not a recognized datetime format." + ) + results.append(entry) + continue + + # Calculate progress: (cursor - sync_start) / (now - sync_start) + denominator = (now - sync_start_time).total_seconds() + if denominator <= 0: + entry["reason"] = "Sync start time is not before current time." + results.append(entry) + continue + + numerator = (cursor_dt - sync_start_time).total_seconds() + + # Clamp to [0.0, 1.0] + progress = max(0.0, min(1.0, numerator / denominator)) + entry["progress_pct"] = round(progress, 4) + + results.append(entry) + + return results diff --git a/airbyte/mcp/cloud.py b/airbyte/mcp/cloud.py index 594bee0db..b73c9df3e 100644 --- a/airbyte/mcp/cloud.py +++ b/airbyte/mcp/cloud.py @@ -11,6 +11,7 @@ from airbyte import cloud, get_destination, get_source from airbyte._util import api_util +from airbyte.cloud._sync_progress import compute_stream_progress from airbyte.cloud.connectors import CustomCloudSourceDefinition from airbyte.cloud.constants import FAILED_STATUSES from airbyte.cloud.workspaces import CloudOrganization, CloudWorkspace @@ -647,6 +648,19 @@ def get_cloud_sync_status( default=False, ), ], + with_stream_progress: Annotated[ + bool, + Field( + description=( + "Whether to include per-stream sync progress estimates. " + "When enabled, fetches current connection state and catalog to " + "compute an estimated progress percentage for each stream with " + "a datetime-based cursor. This adds latency from additional API " + "calls. Progress is approximate and advances at checkpoint intervals." + ), + default=False, + ), + ], ) -> dict[str, Any]: """Get the status of a sync job from the Airbyte Cloud.""" workspace: CloudWorkspace = _get_cloud_workspace(ctx, workspace_id) @@ -682,6 +696,15 @@ def get_cloud_sync_status( for attempt in attempts ] + if with_stream_progress: + state_data = connection.dump_raw_state() + catalog_data = connection.dump_raw_catalog() + result["stream_progress"] = compute_stream_progress( + state_data=state_data, + catalog_data=catalog_data, + sync_start_time=sync_result.start_time, + ) + return result From 4b1b8499a5b9cf274f5fe997b370ae50038264a7 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 21:30:30 +0000 Subject: [PATCH 02/30] docs: fix docstring inaccuracies in _sync_progress module --- airbyte/cloud/_sync_progress.py | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index 914a5cef4..bed387906 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -37,10 +37,9 @@ def _try_parse_datetime_cursor(value: str) -> datetime | None: - """Attempt to parse a string as a datetime. + """Attempt to parse a string as a datetime via ISO 8601. - Tries ISO 8601 format first, then common datetime patterns. - Returns `None` if the value cannot be parsed as a datetime. + Returns `None` if the value is numeric or cannot be parsed. """ # Fast rejection: if it looks like a pure integer or float, skip it stripped = value.strip() @@ -146,22 +145,15 @@ def compute_stream_progress( ) -> list[dict[str, Any]]: """Compute per-stream sync progress for datetime-cursor-based streams. - Args: - state_data: The raw connection state dict (from `dump_raw_state()`). - catalog_data: The raw configured catalog dict (from `dump_raw_catalog()`), - or `None` if not available. - sync_start_time: The start time of the current sync job. - now: The current time (defaults to `datetime.now(timezone.utc)`). - - Returns: - A list of per-stream progress dicts, each containing: - - `stream_name`: The stream name. - - `stream_namespace`: The stream namespace (or `None`). - - `cursor_field`: The cursor field name (or `None` if unknown). - - `cursor_value`: The current cursor value string (or `None`). - - `progress_pct`: Estimated progress as a float 0.0-1.0 (or `None` - if progress cannot be calculated). - - `reason`: Human-readable explanation if progress cannot be calculated. + Uses a wall-clock time heuristic: + `progress = (cursor_dt - sync_start_time) / (now - sync_start_time)`. + This assumes cursor timestamps advance roughly with wall-clock time, + which works well for real-time incremental syncs but may be inaccurate + for historical backfills where the cursor covers a different time range + than the actual sync duration. + + Progress is `None` for streams without datetime cursors or without + state. Values are clamped to [0.0, 1.0]. """ if now is None: now = datetime.now(timezone.utc) From 6779c79fe26edaaf3ab1d176e794ad49ee588540 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 21:31:32 +0000 Subject: [PATCH 03/30] docs: fix module-level docstring to match wall-clock time implementation --- airbyte/cloud/_sync_progress.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index bed387906..bb755180e 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -1,20 +1,22 @@ # Copyright (c) 2024 Airbyte, Inc., all rights reserved. """Sync progress estimation for datetime-cursor-based incremental streams. -This module provides functions to estimate per-stream sync progress by -comparing the current cursor value against the sync start time. The -progress formula is: +This module provides functions to estimate per-stream sync progress using +a wall-clock time heuristic: ``` -progress = (current_cursor - sync_start_cursor) / (now - sync_start_cursor) +progress = (cursor_dt - sync_start_time) / (now - sync_start_time) ``` Where: -- `current_cursor` is the latest committed cursor value (from state). -- `sync_start_cursor` is the cursor value at the start of the sync - (from the previous completed sync's final state, or from the current - state if no previous sync is available). -- `now` is the current UTC time (estimated sync completion point). +- `cursor_dt` is the latest committed cursor value parsed as a datetime. +- `sync_start_time` is the wall-clock time when the sync job started. +- `now` is the current UTC time. + +This heuristic works well for real-time incremental syncs where cursor +timestamps advance roughly with wall-clock time. It may be inaccurate +for historical backfills where the cursor covers a different time range +than the actual sync duration (progress will clamp to 0% in that case). Only streams with datetime-based cursors are supported. Non-datetime cursors (integers, opaque tokens, etc.) are skipped. From 4a0913df76e49122b1347719d652be704b09614a Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 21:38:45 +0000 Subject: [PATCH 04/30] fix: address CodeRabbit review - Python 3.10 Z suffix, nested cursor paths, error handling --- airbyte/cloud/_sync_progress.py | 36 +++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index bb755180e..91573b4d7 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -56,8 +56,10 @@ def _try_parse_datetime_cursor(value: str) -> datetime | None: return None # It's a number, not a datetime # Try ISO 8601 parsing (handles most Airbyte cursor formats) + # Normalize trailing "Z" to "+00:00" for Python 3.10 compatibility + normalized = stripped[:-1] + "+00:00" if stripped.endswith(("Z", "z")) else stripped try: - dt = datetime.fromisoformat(stripped) + dt = datetime.fromisoformat(normalized) except (ValueError, TypeError): pass else: @@ -93,10 +95,12 @@ def _extract_cursor_field_from_catalog( if (entry_namespace or None) != (stream_namespace or None): continue - # cursor_field is a list of field path segments (usually single element) + # cursor_field may be a list of path segments or a plain string cursor_field = config.get("cursorField") - if cursor_field and isinstance(cursor_field, list) and len(cursor_field) > 0: - return str(cursor_field[0]) + if isinstance(cursor_field, str) and cursor_field: + return cursor_field + if isinstance(cursor_field, list) and cursor_field: + return ".".join(str(segment) for segment in cursor_field) return None @@ -115,11 +119,17 @@ def _find_cursor_value_in_state( if not stream_state: return None - # If we know the cursor field, look for it directly - if cursor_field and cursor_field in stream_state: - val = stream_state[cursor_field] - if val is not None: - return str(val) + # If we know the cursor field, look for it directly (supports dot-delimited paths) + if cursor_field: + current: Any = stream_state + for segment in cursor_field.split("."): + if isinstance(current, dict) and segment in current: + current = current[segment] + else: + current = None + break + if current is not None: + return str(current) # Try common cursor field names as fallback common_cursor_names = ["cursor", "updated_at", "date", "timestamp"] @@ -166,8 +176,12 @@ def compute_stream_progress( if now.tzinfo is None: now = now.replace(tzinfo=timezone.utc) - state = ConnectionStateResponse(**state_data) - streams: list[StreamState] = _get_stream_list(state) + try: + state = ConnectionStateResponse(**state_data) + streams: list[StreamState] = _get_stream_list(state) + except Exception: + logger.warning("Failed to parse connection state data; returning empty progress.") + streams = [] results: list[dict[str, Any]] = [] for stream in streams: From 1896c2f5fdeaf1998d674a96966b9661ab9ec8b1 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 22:02:15 +0000 Subject: [PATCH 05/30] refactor: narrow exception catch to specific types (ValidationError, TypeError, KeyError) --- airbyte/cloud/_sync_progress.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index 91573b4d7..ce6e60cd6 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -28,6 +28,8 @@ from datetime import datetime, timezone from typing import Any +from pydantic import ValidationError + from airbyte.cloud._connection_state import ( ConnectionStateResponse, StreamState, @@ -179,7 +181,7 @@ def compute_stream_progress( try: state = ConnectionStateResponse(**state_data) streams: list[StreamState] = _get_stream_list(state) - except Exception: + except (ValidationError, TypeError, KeyError): logger.warning("Failed to parse connection state data; returning empty progress.") streams = [] From 869c803b4bb9e6332156e47bab42732a29bd7cfe Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 23:16:22 +0000 Subject: [PATCH 06/30] fix: correct sync progress formula and enrich output with raw factors - Use previous sync's cursor as baseline instead of sync_start_time - Return raw factors: cursor_datetime, previous_cursor_value, previous_cursor_datetime, sync_start_time, target_datetime - Return progress_pct=null with reason for historical backfills - Refactor into helper functions to satisfy complexity limits --- airbyte/cloud/_sync_progress.py | 256 +++++++++++++++++++++++--------- airbyte/mcp/cloud.py | 1 + 2 files changed, 184 insertions(+), 73 deletions(-) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index ce6e60cd6..fb0b1ef29 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -1,22 +1,38 @@ # Copyright (c) 2024 Airbyte, Inc., all rights reserved. """Sync progress estimation for datetime-cursor-based incremental streams. -This module provides functions to estimate per-stream sync progress using -a wall-clock time heuristic: +This module provides functions to estimate per-stream sync progress by +comparing the current cursor value against a known previous bookmark +and the current time (`now`), which serves as the estimated sync target. -``` -progress = (cursor_dt - sync_start_time) / (now - sync_start_time) -``` +Formula (when previous bookmark is available): + + progress = (cursor_dt - previous_bookmark_dt) / (now - previous_bookmark_dt) Where: -- `cursor_dt` is the latest committed cursor value parsed as a datetime. -- `sync_start_time` is the wall-clock time when the sync job started. -- `now` is the current UTC time. -This heuristic works well for real-time incremental syncs where cursor -timestamps advance roughly with wall-clock time. It may be inaccurate -for historical backfills where the cursor covers a different time range -than the actual sync duration (progress will clamp to 0% in that case). +- `previous_bookmark_dt` is the cursor value from the last completed sync. +- `cursor_dt` is the latest committed cursor value parsed as a datetime. +- `now` is the current UTC time (estimated completion target). + +Because the Airbyte state API returns only the current (advancing) +cursor, the previous bookmark is not directly available from a single +snapshot. Callers should supply `previous_state_data` (the state +from the previous completed sync) when available. When it is not +supplied, the module falls back to using `sync_start_time` as the +range anchor, which works for real-time incremental syncs but yields +`progress_pct = None` for historical back-fills where the cursor is +behind `sync_start_time`. + +Each per-stream result always includes the raw factors that went into +the estimate so callers can compute their own progress or track it +across multiple calls: + +- `cursor_value` / `cursor_datetime` -- the current cursor position +- `previous_cursor_value` / `previous_cursor_datetime` -- the + baseline, if known +- `target_datetime` -- the estimated target (`now`) +- `sync_start_time` -- the wall-clock job start Only streams with datetime-based cursors are supported. Non-datetime cursors (integers, opaque tokens, etc.) are skipped. @@ -151,23 +167,155 @@ def _find_cursor_value_in_state( return None +def _build_previous_cursor_map( + previous_state_data: dict[str, Any], + catalog_data: dict[str, Any] | None, +) -> dict[tuple[str, str | None], str | None]: + """Build a map of `(stream_name, namespace)` to previous cursor value. + + Parses the previous state snapshot and extracts cursor values for + each stream, returning a lookup dict. + """ + result: dict[tuple[str, str | None], str | None] = {} + try: + prev_state = ConnectionStateResponse(**previous_state_data) + prev_streams: list[StreamState] = _get_stream_list(prev_state) + except (ValidationError, TypeError, KeyError): + return result + + for stream in prev_streams: + s_name = stream.stream_descriptor.name + s_ns = stream.stream_descriptor.namespace + + cursor_field: str | None = None + if catalog_data: + cursor_field = _extract_cursor_field_from_catalog(catalog_data, s_name, s_ns) + + cursor_val = _find_cursor_value_in_state(stream.stream_state, cursor_field) + result[s_name, s_ns] = cursor_val + + return result + + +def _compute_single_stream_progress( + stream: StreamState, + catalog_data: dict[str, Any] | None, + sync_start_time: datetime, + now: datetime, + prev_cursor_map: dict[tuple[str, str | None], str | None], +) -> dict[str, Any]: + """Compute progress for a single stream. + + Returns a dict containing raw factors and the computed `progress_pct`. + """ + stream_name = stream.stream_descriptor.name + stream_namespace = stream.stream_descriptor.namespace + + # Look up cursor field from catalog + cursor_field: str | None = None + if catalog_data: + cursor_field = _extract_cursor_field_from_catalog( + catalog_data, stream_name, stream_namespace + ) + + # Find cursor value in current (advancing) state + cursor_value_str = _find_cursor_value_in_state(stream.stream_state, cursor_field) + + # Find previous cursor value + prev_cursor_str: str | None = prev_cursor_map.get((stream_name, stream_namespace)) + prev_cursor_dt: datetime | None = None + if prev_cursor_str: + prev_cursor_dt = _try_parse_datetime_cursor(prev_cursor_str) + + entry: dict[str, Any] = { + "stream_name": stream_name, + "stream_namespace": stream_namespace, + "cursor_field": cursor_field, + "cursor_value": cursor_value_str, + "cursor_datetime": None, + "previous_cursor_value": prev_cursor_str, + "previous_cursor_datetime": prev_cursor_dt.isoformat() if prev_cursor_dt else None, + "sync_start_time": sync_start_time.isoformat(), + "target_datetime": now.isoformat(), + "progress_pct": None, + "reason": None, + } + + if cursor_value_str is None: + entry["reason"] = "No cursor value found in state." + return entry + + cursor_dt = _try_parse_datetime_cursor(cursor_value_str) + if cursor_dt is None: + entry["reason"] = f"Cursor value '{cursor_value_str}' is not a recognized datetime format." + return entry + + entry["cursor_datetime"] = cursor_dt.isoformat() + + # Determine the range anchor (baseline). + # Prefer previous bookmark; fall back to sync_start_time. + range_start: datetime = prev_cursor_dt if prev_cursor_dt is not None else sync_start_time + + denominator = (now - range_start).total_seconds() + if denominator <= 0: + entry["reason"] = "Range anchor is not before target time." + return entry + + numerator = (cursor_dt - range_start).total_seconds() + + if numerator < 0: + _set_negative_progress_reason(entry, prev_cursor_dt) + return entry + + # Clamp to [0.0, 1.0] + entry["progress_pct"] = round(max(0.0, min(1.0, numerator / denominator)), 4) + return entry + + +def _set_negative_progress_reason( + entry: dict[str, Any], + prev_cursor_dt: datetime | None, +) -> None: + """Set progress and reason when cursor is behind the range anchor.""" + if prev_cursor_dt is not None: + entry["progress_pct"] = 0.0 + entry["reason"] = "Cursor has not advanced past the previous bookmark." + else: + entry["progress_pct"] = None + entry["reason"] = ( + "Cursor is behind sync start time (historical back-fill). " + "Previous bookmark not available; progress indeterminate. " + "Use the raw factor fields to compute progress across " + "multiple calls." + ) + + def compute_stream_progress( state_data: dict[str, Any], catalog_data: dict[str, Any] | None, sync_start_time: datetime, now: datetime | None = None, + previous_state_data: dict[str, Any] | None = None, ) -> list[dict[str, Any]]: """Compute per-stream sync progress for datetime-cursor-based streams. - Uses a wall-clock time heuristic: - `progress = (cursor_dt - sync_start_time) / (now - sync_start_time)`. - This assumes cursor timestamps advance roughly with wall-clock time, - which works well for real-time incremental syncs but may be inaccurate - for historical backfills where the cursor covers a different time range - than the actual sync duration. + Returns a list of per-stream dicts, each containing the raw factors + that went into the progress estimate as well as the computed + `progress_pct` (or `None` when indeterminate). + + Progress formula (when previous bookmark is available): + + progress = (cursor_dt - previous_bookmark_dt) / (now - previous_bookmark_dt) - Progress is `None` for streams without datetime cursors or without - state. Values are clamped to [0.0, 1.0]. + When `previous_state_data` is not supplied, falls back to + `sync_start_time` as the range anchor: + + progress = (cursor_dt - sync_start_time) / (now - sync_start_time) + + This fallback works for real-time incremental syncs where cursors + advance near wall-clock time, but yields `progress_pct = None` + for historical back-fills where the cursor is behind + `sync_start_time`. """ if now is None: now = datetime.now(timezone.utc) @@ -178,6 +326,11 @@ def compute_stream_progress( if now.tzinfo is None: now = now.replace(tzinfo=timezone.utc) + # Build previous cursor lookup if previous state was provided + prev_cursor_map: dict[tuple[str, str | None], str | None] = {} + if previous_state_data: + prev_cursor_map = _build_previous_cursor_map(previous_state_data, catalog_data) + try: state = ConnectionStateResponse(**state_data) streams: list[StreamState] = _get_stream_list(state) @@ -185,56 +338,13 @@ def compute_stream_progress( logger.warning("Failed to parse connection state data; returning empty progress.") streams = [] - results: list[dict[str, Any]] = [] - for stream in streams: - stream_name = stream.stream_descriptor.name - stream_namespace = stream.stream_descriptor.namespace - - # Look up cursor field from catalog - cursor_field: str | None = None - if catalog_data: - cursor_field = _extract_cursor_field_from_catalog( - catalog_data, stream_name, stream_namespace - ) - - # Find cursor value in state - cursor_value_str = _find_cursor_value_in_state(stream.stream_state, cursor_field) - - entry: dict[str, Any] = { - "stream_name": stream_name, - "stream_namespace": stream_namespace, - "cursor_field": cursor_field, - "cursor_value": cursor_value_str, - "progress_pct": None, - "reason": None, - } - - if cursor_value_str is None: - entry["reason"] = "No cursor value found in state." - results.append(entry) - continue - - cursor_dt = _try_parse_datetime_cursor(cursor_value_str) - if cursor_dt is None: - entry["reason"] = ( - f"Cursor value '{cursor_value_str}' is not a recognized datetime format." - ) - results.append(entry) - continue - - # Calculate progress: (cursor - sync_start) / (now - sync_start) - denominator = (now - sync_start_time).total_seconds() - if denominator <= 0: - entry["reason"] = "Sync start time is not before current time." - results.append(entry) - continue - - numerator = (cursor_dt - sync_start_time).total_seconds() - - # Clamp to [0.0, 1.0] - progress = max(0.0, min(1.0, numerator / denominator)) - entry["progress_pct"] = round(progress, 4) - - results.append(entry) - - return results + return [ + _compute_single_stream_progress( + stream=stream, + catalog_data=catalog_data, + sync_start_time=sync_start_time, + now=now, + prev_cursor_map=prev_cursor_map, + ) + for stream in streams + ] diff --git a/airbyte/mcp/cloud.py b/airbyte/mcp/cloud.py index b73c9df3e..1879fdf1c 100644 --- a/airbyte/mcp/cloud.py +++ b/airbyte/mcp/cloud.py @@ -703,6 +703,7 @@ def get_cloud_sync_status( state_data=state_data, catalog_data=catalog_data, sync_start_time=sync_result.start_time, + previous_state_data=None, ) return result From f3944a815ad57d95e77509b51e67d84c524b64a8 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 23:28:39 +0000 Subject: [PATCH 07/30] feat: fetch previous sync state for progress baseline Add get_previous_sync_state() to CloudConnection that retrieves the final committed state from the most recent completed sync job. This provides the baseline cursor values needed for accurate progress calculation. Wire into get_cloud_sync_status MCP tool to pass previous_state_data to compute_stream_progress(). --- airbyte/cloud/connections.py | 46 ++++++++++++++++++++++++++++++++++++ airbyte/mcp/cloud.py | 5 +++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/airbyte/cloud/connections.py b/airbyte/cloud/connections.py index cfa3149a1..4464e33ac 100644 --- a/airbyte/cloud/connections.py +++ b/airbyte/cloud/connections.py @@ -376,6 +376,52 @@ def get_sync_result( job_id=job_id, ) + def get_previous_sync_state( + self, + *, + current_job_id: int | None = None, + ) -> dict[str, Any] | None: + """Get the state from the most recent completed sync job. + + Fetches the previous completed (succeeded) sync job from job history + and extracts the final committed state from its last attempt's output. + This is useful for determining the baseline cursor values before + the current sync started advancing state. + + When `current_job_id` is provided, that job is skipped so the + returned state always comes from a *previous* job. + + Returns the state dict (same shape as `dump_raw_state()`), or `None` + if no previous completed sync is found or if state data is not + available in the job output. + """ + previous_jobs = self.get_previous_sync_logs(limit=5) + + for job in previous_jobs: + # Skip the current job if specified + if current_job_id is not None and job.job_id == current_job_id: + continue + + status = str(job.get_job_status()) + if status != "succeeded": + continue + + # Fetch full job data including attempt output + job_data = job._fetch_job_with_attempts() # noqa: SLF001 + attempts = job_data.get("attempts", []) + if not attempts: + return None + + last_attempt = attempts[-1] + output = last_attempt.get("attempt", {}).get("output", {}) + state = output.get("state") + if state and isinstance(state, dict): + return state + + return None + + return None + # Artifacts @deprecated("Use 'dump_raw_state()' instead.") diff --git a/airbyte/mcp/cloud.py b/airbyte/mcp/cloud.py index 1879fdf1c..c0cabd579 100644 --- a/airbyte/mcp/cloud.py +++ b/airbyte/mcp/cloud.py @@ -699,11 +699,14 @@ def get_cloud_sync_status( if with_stream_progress: state_data = connection.dump_raw_state() catalog_data = connection.dump_raw_catalog() + previous_state_data = connection.get_previous_sync_state( + current_job_id=sync_result.job_id, + ) result["stream_progress"] = compute_stream_progress( state_data=state_data, catalog_data=catalog_data, sync_start_time=sync_result.start_time, - previous_state_data=None, + previous_state_data=previous_state_data, ) return result From c310209933c6b78584ecd6c835a2c9721d49b11b Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 23:34:58 +0000 Subject: [PATCH 08/30] fix: use enum comparison and continue scanning in get_previous_sync_state --- airbyte/cloud/connections.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/airbyte/cloud/connections.py b/airbyte/cloud/connections.py index 4464e33ac..e6a4a9d0a 100644 --- a/airbyte/cloud/connections.py +++ b/airbyte/cloud/connections.py @@ -15,6 +15,7 @@ _match_stream, ) from airbyte.cloud.connectors import CloudDestination, CloudSource +from airbyte.cloud.constants import JobStatusEnum from airbyte.cloud.sync_results import SyncResult from airbyte.exceptions import AirbyteWorkspaceMismatchError, PyAirbyteInputError @@ -402,24 +403,21 @@ def get_previous_sync_state( if current_job_id is not None and job.job_id == current_job_id: continue - status = str(job.get_job_status()) - if status != "succeeded": + if job.get_job_status() != JobStatusEnum.SUCCEEDED: continue # Fetch full job data including attempt output job_data = job._fetch_job_with_attempts() # noqa: SLF001 attempts = job_data.get("attempts", []) if not attempts: - return None + continue last_attempt = attempts[-1] output = last_attempt.get("attempt", {}).get("output", {}) state = output.get("state") - if state and isinstance(state, dict): + if isinstance(state, dict): return state - return None - return None # Artifacts From f913d018497f22392981fc0ecc52d7da2d2230a1 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 00:34:16 +0000 Subject: [PATCH 09/30] feat: add with_rich_status_updates to wait_for_completion and run_sync - Bump JOB_WAIT_INTERVAL_SECS from 2.0 to 5.0 - Add with_rich_status_updates: bool | int = False param to SyncResult.wait_for_completion() and CloudConnection.run_sync() - Rich Live table shows per-stream progress (cursor, previous cursor, progress %, status/reason) with configurable polling interval - Min polling interval is 15s; values below are clamped with warning - True defaults to 15s poll frequency - ValueError if wait=False and with_rich_status_updates is truthy - When rich updates enabled, the rich interval is the sole poll cadence --- airbyte/_util/api_util.py | 2 +- airbyte/cloud/connections.py | 16 ++- airbyte/cloud/sync_results.py | 234 +++++++++++++++++++++++++++++++++- 3 files changed, 243 insertions(+), 9 deletions(-) diff --git a/airbyte/_util/api_util.py b/airbyte/_util/api_util.py index 650de345a..2864ba765 100644 --- a/airbyte/_util/api_util.py +++ b/airbyte/_util/api_util.py @@ -47,7 +47,7 @@ ) -JOB_WAIT_INTERVAL_SECS = 2.0 +JOB_WAIT_INTERVAL_SECS = 5.0 JOB_WAIT_TIMEOUT_SECS_DEFAULT = 60 * 60 # 1 hour # Job ordering constants for list_jobs API diff --git a/airbyte/cloud/connections.py b/airbyte/cloud/connections.py index e6a4a9d0a..b80d70023 100644 --- a/airbyte/cloud/connections.py +++ b/airbyte/cloud/connections.py @@ -263,8 +263,21 @@ def run_sync( *, wait: bool = True, wait_timeout: int = 300, + with_rich_status_updates: bool | int = False, ) -> SyncResult: - """Run a sync.""" + """Run a sync. + + When `with_rich_status_updates` is truthy, a Rich Live table + showing per-stream progress is displayed while waiting for + completion. Requires `wait=True`; passing `wait=False` with a + truthy `with_rich_status_updates` raises `ValueError`. + """ + if not wait and with_rich_status_updates: + raise ValueError( + "Cannot use `with_rich_status_updates` when `wait=False`. " + "Rich status updates require waiting for the sync to complete." + ) + connection_response = api_util.run_connection( connection_id=self.connection_id, api_root=self.workspace.api_root, @@ -284,6 +297,7 @@ def run_sync( wait_timeout=wait_timeout, raise_failure=True, raise_timeout=True, + with_rich_status_updates=with_rich_status_updates, ) return sync_result diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index 8920b9615..a7306d41a 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -101,16 +101,22 @@ from __future__ import annotations import time +import warnings from collections.abc import Iterator, Mapping from dataclasses import asdict, dataclass +from datetime import datetime, timezone from typing import TYPE_CHECKING, Any +from rich.console import Console +from rich.live import Live as RichLive +from rich.table import Table from typing_extensions import final from airbyte_cdk.utils.datetime_helpers import ab_datetime_parse from airbyte._util import api_util from airbyte.caches._utils._dest_to_cache import destination_to_cache +from airbyte.cloud._sync_progress import compute_stream_progress from airbyte.cloud.constants import FAILED_STATUSES, FINAL_STATUSES from airbyte.datasets import CachedDataset from airbyte.exceptions import AirbyteConnectionSyncError, AirbyteConnectionSyncTimeoutError @@ -119,9 +125,13 @@ DEFAULT_SYNC_TIMEOUT_SECONDS = 30 * 60 # 30 minutes """The default timeout for waiting for a sync job to complete, in seconds.""" -if TYPE_CHECKING: - from datetime import datetime +MIN_RICH_UPDATE_INTERVAL_SECS = 15 +"""Minimum polling interval when Rich status updates are enabled.""" + +DEFAULT_RICH_UPDATE_INTERVAL_SECS = 15 +"""Default polling interval when `with_rich_status_updates=True`.""" +if TYPE_CHECKING: import sqlalchemy from airbyte._util.api_imports import ConnectionResponse, JobResponse, JobStatusEnum @@ -130,6 +140,83 @@ from airbyte.cloud.workspaces import CloudWorkspace +def _resolve_rich_interval(*, with_rich_status_updates: bool | int) -> float: + """Normalize `with_rich_status_updates` to a polling interval in seconds. + + `True` maps to `DEFAULT_RICH_UPDATE_INTERVAL_SECS`. An `int` is + clamped to `MIN_RICH_UPDATE_INTERVAL_SECS` with a warning when the + caller-provided value is too low. + """ + if with_rich_status_updates is True: + return float(DEFAULT_RICH_UPDATE_INTERVAL_SECS) + + interval = int(with_rich_status_updates) + if interval < MIN_RICH_UPDATE_INTERVAL_SECS: + warnings.warn( + f"Rich status update interval {interval}s is below the minimum " + f"of {MIN_RICH_UPDATE_INTERVAL_SECS}s. Using {MIN_RICH_UPDATE_INTERVAL_SECS}s.", + UserWarning, + stacklevel=3, + ) + return float(MIN_RICH_UPDATE_INTERVAL_SECS) + + return float(interval) + + +def _build_rich_table( + stream_progress: list[dict[str, Any]], + job_status: str, + elapsed_secs: float, +) -> Table: + """Build a Rich `Table` showing per-stream sync progress.""" + elapsed_str = _format_elapsed(elapsed_secs) + + streams_with_pct = sum(1 for s in stream_progress if s.get("progress_pct") is not None) + total_streams = len(stream_progress) + + title = ( + f"Sync Progress | Status: {job_status} | " + f"Elapsed: {elapsed_str} | " + f"Streams: {streams_with_pct}/{total_streams} reporting progress" + ) + + table = Table(title=title, show_lines=False, expand=True) + table.add_column("Stream", style="cyan", no_wrap=True) + table.add_column("Progress", justify="right", style="green") + table.add_column("Cursor Value", style="yellow") + table.add_column("Previous Cursor", style="dim") + table.add_column("Status / Reason", style="dim") + + for entry in stream_progress: + pct = entry.get("progress_pct") + pct_str = f"{pct:.1%}" if pct is not None else "--" + cursor_val = entry.get("cursor_value") or "--" + prev_cursor = entry.get("previous_cursor_value") or "--" + reason = entry.get("reason") or "" + + table.add_row( + entry.get("stream_name", "?"), + pct_str, + str(cursor_val), + str(prev_cursor), + reason, + ) + + return table + + +def _format_elapsed(seconds: float) -> str: + """Format elapsed seconds as `HH:MM:SS`.""" + total = int(seconds) + hours, remainder = divmod(total, 3600) + minutes, secs = divmod(remainder, 60) + if hours: + return f"{hours}h {minutes:02d}m {secs:02d}s" + if minutes: + return f"{minutes}m {secs:02d}s" + return f"{secs}s" + + @dataclass class SyncAttempt: """Represents a single attempt of a sync job. @@ -388,16 +475,71 @@ def wait_for_completion( wait_timeout: int = DEFAULT_SYNC_TIMEOUT_SECONDS, raise_timeout: bool = True, raise_failure: bool = False, + with_rich_status_updates: bool | int = False, ) -> JobStatusEnum: - """Wait for a job to finish running.""" + """Wait for a job to finish running. + + When `with_rich_status_updates` is truthy, a Rich Live table is + rendered to stderr showing per-stream sync progress. Pass `True` + for 15-second polling, or an `int` for a custom interval in + seconds (minimum 15s -- values below 15 are clamped with a + warning). The rich polling interval replaces + `JOB_WAIT_INTERVAL_SECS` as the sole loop cadence. + """ + poll_interval: float = api_util.JOB_WAIT_INTERVAL_SECS + rich_enabled = bool(with_rich_status_updates) + + if rich_enabled: + poll_interval = _resolve_rich_interval( + with_rich_status_updates=with_rich_status_updates, + ) + start_time = time.time() + + if not rich_enabled: + return self._poll_until_complete( + start_time=start_time, + poll_interval=poll_interval, + wait_timeout=wait_timeout, + raise_timeout=raise_timeout, + raise_failure=raise_failure, + ) + + # Rich status updates path + console = Console(stderr=True) + live = RichLive(console=console, auto_refresh=False) + try: + live.start() + return self._poll_until_complete_with_rich( + live=live, + start_time=start_time, + poll_interval=poll_interval, + wait_timeout=wait_timeout, + raise_timeout=raise_timeout, + raise_failure=raise_failure, + ) + finally: + live.stop() + + # ------------------------------------------------------------------ + # Internal polling helpers + # ------------------------------------------------------------------ + + def _poll_until_complete( + self, + *, + start_time: float, + poll_interval: float, + wait_timeout: int, + raise_timeout: bool, + raise_failure: bool, + ) -> JobStatusEnum: + """Plain polling loop without Rich output.""" while True: latest_status = self.get_job_status() if latest_status in FINAL_STATUSES: if raise_failure: - # No-op if the job succeeded or is still running: self.raise_failure_status() - return latest_status if time.time() - start_time > wait_timeout: @@ -409,10 +551,88 @@ def wait_for_completion( job_status=latest_status, timeout=wait_timeout, ) + return latest_status + + time.sleep(poll_interval) + + def _poll_until_complete_with_rich( + self, + *, + live: RichLive, + start_time: float, + poll_interval: float, + wait_timeout: int, + raise_timeout: bool, + raise_failure: bool, + ) -> JobStatusEnum: + """Polling loop with Rich Live table showing per-stream progress.""" + previous_state: dict[str, Any] | None = None + catalog_data: dict[str, Any] | None = None + state_fetched = False + + while True: + latest_status = self.get_job_status() + + # Lazy-fetch baseline data on first iteration + if not state_fetched: + previous_state = self.connection.get_previous_sync_state( + current_job_id=self.job_id, + ) + catalog_data = api_util.get_connection_catalog( + connection_id=self.connection.connection_id, + api_root=self.workspace.api_root, + client_id=self.workspace.client_id, + client_secret=self.workspace.client_secret, + bearer_token=self.workspace.bearer_token, + ) + state_fetched = True + + # Fetch current state and compute progress + state_data = api_util.get_connection_state( + connection_id=self.connection.connection_id, + api_root=self.workspace.api_root, + client_id=self.workspace.client_id, + client_secret=self.workspace.client_secret, + bearer_token=self.workspace.bearer_token, + ) + sync_start_time_dt: datetime + try: + sync_start_time_dt = self.start_time + except (ValueError, TypeError): + sync_start_time_dt = datetime.now(timezone.utc) + + stream_progress = compute_stream_progress( + state_data=state_data, + catalog_data=catalog_data, + sync_start_time=sync_start_time_dt, + previous_state_data=previous_state, + ) + + elapsed = time.time() - start_time + table = _build_rich_table( + stream_progress=stream_progress, + job_status=str(latest_status), + elapsed_secs=elapsed, + ) + live.update(table, refresh=True) + + if latest_status in FINAL_STATUSES: + if raise_failure: + self.raise_failure_status() + return latest_status - return latest_status # This will be a non-final status + if time.time() - start_time > wait_timeout: + if raise_timeout: + raise AirbyteConnectionSyncTimeoutError( + workspace=self.workspace, + connection_id=self.connection.connection_id, + job_id=self.job_id, + job_status=latest_status, + timeout=wait_timeout, + ) + return latest_status - time.sleep(api_util.JOB_WAIT_INTERVAL_SECS) + time.sleep(poll_interval) def get_sql_cache(self) -> CacheBase: """Return a SQL Cache object for working with the data in a SQL-based destination's.""" From 0843782ff84af51b0536890aa789d51b18b00de5 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 00:42:51 +0000 Subject: [PATCH 10/30] docs: add example script for cloud sync with Rich progress tracking --- examples/run_cloud_sync_with_rich_progress.py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 examples/run_cloud_sync_with_rich_progress.py diff --git a/examples/run_cloud_sync_with_rich_progress.py b/examples/run_cloud_sync_with_rich_progress.py new file mode 100644 index 000000000..ba84dfafd --- /dev/null +++ b/examples/run_cloud_sync_with_rich_progress.py @@ -0,0 +1,64 @@ +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +"""Run a cloud sync with Rich Live progress tracking. + +Demonstrates the `with_rich_status_updates` feature, which renders a +real-time Rich table to stderr showing per-stream sync progress while +waiting for a Cloud sync to complete. + +Prerequisites: + - An Airbyte Cloud API key exported as ``AIRBYTE_CLOUD_API_KEY``. + - The workspace and connection IDs below must be accessible with + that key. The defaults point to the ``@devin-ai-sandbox`` + workspace (Google Analytics 4 connection). + +Usage (from the PyAirbyte root directory): + uv run python examples/run_cloud_sync_with_rich_progress.py + +You can also pass a custom refresh interval (in seconds) instead of +``True`` to control how often the table refreshes: + + connection.run_sync(with_rich_status_updates=30) # refresh every 30s +""" + +from __future__ import annotations + +import airbyte as ab +from airbyte.cloud import CloudWorkspace + +# --------------------------------------------------------------------------- +# Configuration – hard-coded to the @devin-ai-sandbox workspace +# --------------------------------------------------------------------------- + +WORKSPACE_ID = "266ebdfe-0d7b-4540-9817-de7e4505ba61" +CONNECTION_ID = "d9c752fe-515a-4066-9234-096b101ea16e" # GA4 -> dev-null + + +def main() -> None: + """Trigger a Cloud sync and display a Rich Live progress table.""" + workspace = CloudWorkspace( + workspace_id=WORKSPACE_ID, + api_key=ab.get_secret("AIRBYTE_CLOUD_API_KEY"), + ) + + connection = workspace.get_connection(connection_id=CONNECTION_ID) + print(f"Connection: {connection.connection_id}") + print(f"Streams: {connection.stream_names}") + print() + print("Starting sync with Rich status updates (15 s refresh) ...") + print("(The Rich table renders to stderr; watch your terminal.)") + print() + + sync_result = connection.run_sync( + wait_timeout=60 * 60, # 1 hour + with_rich_status_updates=True, # 15s default refresh + ) + + print() + print(f"Sync complete! Status: {sync_result.get_job_status()}") + print(f" Records synced : {sync_result.records_synced:,}") + print(f" Bytes synced : {sync_result.bytes_synced:,}") + print(f" Job URL : {sync_result.job_url}") + + +if __name__ == "__main__": + main() From fe4551d8b84040560286a9bb2f67dffe7a539c93 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 01:53:05 +0000 Subject: [PATCH 11/30] fix: cache pre-sync state and add tiered fallback for progress baseline - Snapshot dump_raw_state() in run_sync() before triggering sync - Store cached state on SyncResult._pre_sync_state for Rich polling - Add first-observed cursor tracking in _poll_until_complete_with_rich - Implement 3-tier fallback in compute_stream_progress: 1. Previous completed sync's cursor (from cached pre-sync state) 2. First-observed cursor during polling (for first-ever syncs) 3. sync_start_time (for real-time cursor sources) - Add _update_first_seen_cursors helper for polling loop --- airbyte/cloud/_sync_progress.py | 32 +++++++++----- airbyte/cloud/connections.py | 8 ++++ airbyte/cloud/sync_results.py | 74 +++++++++++++++++++++++++++++---- 3 files changed, 95 insertions(+), 19 deletions(-) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index fb0b1ef29..01bf678ba 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -203,6 +203,7 @@ def _compute_single_stream_progress( sync_start_time: datetime, now: datetime, prev_cursor_map: dict[tuple[str, str | None], str | None], + first_seen_cursors: dict[tuple[str, str | None], str] | None = None, ) -> dict[str, Any]: """Compute progress for a single stream. @@ -252,9 +253,18 @@ def _compute_single_stream_progress( entry["cursor_datetime"] = cursor_dt.isoformat() - # Determine the range anchor (baseline). - # Prefer previous bookmark; fall back to sync_start_time. - range_start: datetime = prev_cursor_dt if prev_cursor_dt is not None else sync_start_time + # Determine the range anchor (baseline) using tiered fallback: + # Tier 1: Previous completed sync's cursor (prev_cursor_dt) + # Tier 2: First-observed cursor during this polling session + # Tier 3: sync_start_time (only useful for real-time cursors) + range_start: datetime | None = prev_cursor_dt + if range_start is None and first_seen_cursors: + first_seen_val = first_seen_cursors.get((stream_name, stream_namespace)) + if first_seen_val is not None: + range_start = _try_parse_datetime_cursor(first_seen_val) + + if range_start is None: + range_start = sync_start_time denominator = (now - range_start).total_seconds() if denominator <= 0: @@ -296,6 +306,7 @@ def compute_stream_progress( sync_start_time: datetime, now: datetime | None = None, previous_state_data: dict[str, Any] | None = None, + first_seen_cursors: dict[tuple[str, str | None], str] | None = None, ) -> list[dict[str, Any]]: """Compute per-stream sync progress for datetime-cursor-based streams. @@ -307,15 +318,15 @@ def compute_stream_progress( progress = (cursor_dt - previous_bookmark_dt) / (now - previous_bookmark_dt) - When `previous_state_data` is not supplied, falls back to - `sync_start_time` as the range anchor: + Baseline selection uses a tiered fallback: - progress = (cursor_dt - sync_start_time) / (now - sync_start_time) + 1. Previous completed sync's cursor from ``previous_state_data``. + 2. First-observed cursor during polling (``first_seen_cursors``). + 3. ``sync_start_time`` (wall-clock job start). - This fallback works for real-time incremental syncs where cursors - advance near wall-clock time, but yields `progress_pct = None` - for historical back-fills where the cursor is behind - `sync_start_time`. + Tier 3 works for real-time incremental syncs where cursors advance + near wall-clock time, but yields ``progress_pct = None`` for + historical back-fills where the cursor is behind ``sync_start_time``. """ if now is None: now = datetime.now(timezone.utc) @@ -345,6 +356,7 @@ def compute_stream_progress( sync_start_time=sync_start_time, now=now, prev_cursor_map=prev_cursor_map, + first_seen_cursors=first_seen_cursors, ) for stream in streams ] diff --git a/airbyte/cloud/connections.py b/airbyte/cloud/connections.py index b80d70023..4da4f811d 100644 --- a/airbyte/cloud/connections.py +++ b/airbyte/cloud/connections.py @@ -278,6 +278,13 @@ def run_sync( "Rich status updates require waiting for the sync to complete." ) + # Snapshot the current committed state *before* triggering the sync. + # This gives us the baseline (denominator) for progress calculation, + # since the state API only exposes the latest advancing cursor. + pre_sync_state: dict[str, Any] | None = None + if with_rich_status_updates: + pre_sync_state = self.dump_raw_state() + connection_response = api_util.run_connection( connection_id=self.connection_id, api_root=self.workspace.api_root, @@ -290,6 +297,7 @@ def run_sync( workspace=self.workspace, connection=self, job_id=connection_response.job_id, + _pre_sync_state=pre_sync_state, ) if wait: diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index a7306d41a..eb27942a6 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -107,6 +107,7 @@ from datetime import datetime, timezone from typing import TYPE_CHECKING, Any +from pydantic import ValidationError from rich.console import Console from rich.live import Live as RichLive from rich.table import Table @@ -116,7 +117,15 @@ from airbyte._util import api_util from airbyte.caches._utils._dest_to_cache import destination_to_cache -from airbyte.cloud._sync_progress import compute_stream_progress +from airbyte.cloud._connection_state import ( + ConnectionStateResponse, + _get_stream_list, +) +from airbyte.cloud._sync_progress import ( + _extract_cursor_field_from_catalog, + _find_cursor_value_in_state, + compute_stream_progress, +) from airbyte.cloud.constants import FAILED_STATUSES, FINAL_STATUSES from airbyte.datasets import CachedDataset from airbyte.exceptions import AirbyteConnectionSyncError, AirbyteConnectionSyncTimeoutError @@ -301,6 +310,41 @@ def get_full_log_text(self) -> str: return result +def _update_first_seen_cursors( + *, + first_seen_cursors: dict[tuple[str, str | None], str], + state_data: dict[str, Any], + catalog_data: dict[str, Any] | None, +) -> None: + """Record the first observed cursor value for each stream. + + On the first poll iteration where a stream appears in the state, + its cursor value is captured. This provides a fallback baseline + for first-ever syncs where no previous completed state exists. + """ + try: + state = ConnectionStateResponse(**state_data) + streams = _get_stream_list(state) + except (ValidationError, TypeError, KeyError): + return + + for stream in streams: + key = (stream.stream_descriptor.name, stream.stream_descriptor.namespace) + if key in first_seen_cursors: + continue # already recorded + + cursor_field: str | None = None + if catalog_data: + cursor_field = _extract_cursor_field_from_catalog( + catalog_data, + stream.stream_descriptor.name, + stream.stream_descriptor.namespace, + ) + cursor_val = _find_cursor_value_in_state(stream.stream_state, cursor_field) + if cursor_val is not None: + first_seen_cursors[key] = cursor_val + + @dataclass class SyncResult: """The result of a sync operation. @@ -318,6 +362,7 @@ class SyncResult: _connection_response: ConnectionResponse | None = None _cache: CacheBase | None = None _job_with_attempts_info: dict[str, Any] | None = None + _pre_sync_state: dict[str, Any] | None = None @property def job_url(self) -> str: @@ -566,18 +611,20 @@ def _poll_until_complete_with_rich( raise_failure: bool, ) -> JobStatusEnum: """Polling loop with Rich Live table showing per-stream progress.""" - previous_state: dict[str, Any] | None = None + previous_state: dict[str, Any] | None = self._pre_sync_state catalog_data: dict[str, Any] | None = None - state_fetched = False + catalog_fetched = False + + # Track first-observed cursors as a fallback baseline when no + # previous sync state is available. Keys are (stream_name, namespace) + # and values are the raw cursor string captured on first sighting. + first_seen_cursors: dict[tuple[str, str | None], str] = {} while True: latest_status = self.get_job_status() - # Lazy-fetch baseline data on first iteration - if not state_fetched: - previous_state = self.connection.get_previous_sync_state( - current_job_id=self.job_id, - ) + # Lazy-fetch catalog on first iteration + if not catalog_fetched: catalog_data = api_util.get_connection_catalog( connection_id=self.connection.connection_id, api_root=self.workspace.api_root, @@ -585,7 +632,7 @@ def _poll_until_complete_with_rich( client_secret=self.workspace.client_secret, bearer_token=self.workspace.bearer_token, ) - state_fetched = True + catalog_fetched = True # Fetch current state and compute progress state_data = api_util.get_connection_state( @@ -595,6 +642,14 @@ def _poll_until_complete_with_rich( client_secret=self.workspace.client_secret, bearer_token=self.workspace.bearer_token, ) + + # Record first-observed cursors for streams we haven't seen yet + _update_first_seen_cursors( + first_seen_cursors=first_seen_cursors, + state_data=state_data, + catalog_data=catalog_data, + ) + sync_start_time_dt: datetime try: sync_start_time_dt = self.start_time @@ -606,6 +661,7 @@ def _poll_until_complete_with_rich( catalog_data=catalog_data, sync_start_time=sync_start_time_dt, previous_state_data=previous_state, + first_seen_cursors=first_seen_cursors, ) elapsed = time.time() - start_time From 68ac2d63650b101a1bc8f2dde1252e85053b815f Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 02:06:05 +0000 Subject: [PATCH 12/30] fix: handle historical backfill in progress computation When the current cursor is behind the previous bookmark (e.g. GA4 re-processing from an earlier date), compute progress as: (cursor - first_seen) / (prev_bookmark - first_seen) This correctly shows advancing progress for connectors that start their cursor at a historical date and work forward toward the previous bookmark. Extract _compute_progress_pct helper to keep return count within ruff PLR0911 limit. --- airbyte/cloud/_sync_progress.py | 71 +++++++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index 01bf678ba..3859ec34c 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -253,33 +253,80 @@ def _compute_single_stream_progress( entry["cursor_datetime"] = cursor_dt.isoformat() - # Determine the range anchor (baseline) using tiered fallback: - # Tier 1: Previous completed sync's cursor (prev_cursor_dt) - # Tier 2: First-observed cursor during this polling session - # Tier 3: sync_start_time (only useful for real-time cursors) - range_start: datetime | None = prev_cursor_dt - if range_start is None and first_seen_cursors: + # Resolve the first-observed cursor for this stream (tier 2 baseline). + first_seen_dt: datetime | None = None + if first_seen_cursors: first_seen_val = first_seen_cursors.get((stream_name, stream_namespace)) if first_seen_val is not None: - range_start = _try_parse_datetime_cursor(first_seen_val) + first_seen_dt = _try_parse_datetime_cursor(first_seen_val) + + _compute_progress_pct( + entry=entry, + cursor_dt=cursor_dt, + prev_cursor_dt=prev_cursor_dt, + first_seen_dt=first_seen_dt, + sync_start_time=sync_start_time, + now=now, + ) + return entry + + +def _compute_progress_pct( + *, + entry: dict[str, Any], + cursor_dt: datetime, + prev_cursor_dt: datetime | None, + first_seen_dt: datetime | None, + sync_start_time: datetime, + now: datetime, +) -> None: + """Populate `progress_pct` and `reason` on `entry` in-place. + Handles two modes: + + 1. *Historical backfill* — the cursor is at or behind the previous + bookmark (e.g. GA4 re-processing from an earlier date). Progress is + measured as ``(cursor - first_seen) / (prev_bookmark - first_seen)``. + + 2. *Standard forward progress* — the cursor advances beyond the + baseline toward ``now``. Progress is + ``(cursor - range_start) / (now - range_start)``. + """ + # --- Historical backfill path --- + if ( + prev_cursor_dt is not None + and cursor_dt <= prev_cursor_dt + and first_seen_dt is not None + and first_seen_dt < prev_cursor_dt + ): + denominator = (prev_cursor_dt - first_seen_dt).total_seconds() + if denominator <= 0: + entry["reason"] = "Range anchor is not before target time." + return + numerator = (cursor_dt - first_seen_dt).total_seconds() + entry["progress_pct"] = round(max(0.0, min(1.0, numerator / denominator)), 4) + if entry["progress_pct"] == 0.0: + entry["reason"] = "Cursor has not yet advanced past the first observed value." + return + + # --- Standard forward-progress path --- + range_start: datetime | None = prev_cursor_dt + if range_start is None and first_seen_dt is not None: + range_start = first_seen_dt if range_start is None: range_start = sync_start_time denominator = (now - range_start).total_seconds() if denominator <= 0: entry["reason"] = "Range anchor is not before target time." - return entry + return numerator = (cursor_dt - range_start).total_seconds() - if numerator < 0: _set_negative_progress_reason(entry, prev_cursor_dt) - return entry + return - # Clamp to [0.0, 1.0] entry["progress_pct"] = round(max(0.0, min(1.0, numerator / denominator)), 4) - return entry def _set_negative_progress_reason( From afd150c86b8f878770785704b5c1334a2fcbffa8 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 02:11:51 +0000 Subject: [PATCH 13/30] refactor: address PR feedback - CDK parser, remove heuristics, guard statements, markdown docstrings 1. Replace custom datetime parsing with CDK's ab_datetime_try_parse 2. Remove spaghetti fallback heuristics from _find_cursor_value_in_state (now requires explicit cursor_field from catalog) 3. Replace blanket try/except with guard statements (isinstance checks) 4. Convert reST double-backtick docstrings to markdown single-backtick --- airbyte/cloud/_sync_progress.py | 114 ++++++++++++++------------------ 1 file changed, 49 insertions(+), 65 deletions(-) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index 3859ec34c..c213791b5 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -44,7 +44,7 @@ from datetime import datetime, timezone from typing import Any -from pydantic import ValidationError +from airbyte_cdk.utils.datetime_helpers import ab_datetime_try_parse from airbyte.cloud._connection_state import ( ConnectionStateResponse, @@ -57,36 +57,32 @@ def _try_parse_datetime_cursor(value: str) -> datetime | None: - """Attempt to parse a string as a datetime via ISO 8601. + """Attempt to parse a string as a datetime. + Delegates to the CDK's `ab_datetime_try_parse` for the actual parsing. Returns `None` if the value is numeric or cannot be parsed. """ - # Fast rejection: if it looks like a pure integer or float, skip it stripped = value.strip() if not stripped: return None + # Reject pure numeric strings — the CDK parser interprets them as + # epoch timestamps, but cursor values like "12345" are opaque tokens. try: float(stripped) except ValueError: pass else: - return None # It's a number, not a datetime + return None - # Try ISO 8601 parsing (handles most Airbyte cursor formats) - # Normalize trailing "Z" to "+00:00" for Python 3.10 compatibility - normalized = stripped[:-1] + "+00:00" if stripped.endswith(("Z", "z")) else stripped - try: - dt = datetime.fromisoformat(normalized) - except (ValueError, TypeError): - pass - else: - # Ensure timezone-aware (assume UTC if naive) - if dt.tzinfo is None: - dt = dt.replace(tzinfo=timezone.utc) - return dt + dt = ab_datetime_try_parse(stripped) + if dt is None: + return None - return None + # Ensure timezone-aware (assume UTC if naive) + if dt.tzinfo is None: + dt = dt.replace(tzinfo=timezone.utc) + return dt def _extract_cursor_field_from_catalog( @@ -129,40 +125,25 @@ def _find_cursor_value_in_state( ) -> str | None: """Find a cursor value in a stream state blob. - If `cursor_field` is provided, looks for it directly. Otherwise, - attempts common cursor field names and heuristics. - - Returns the cursor value as a string, or `None` if not found. + Requires `cursor_field` (from the configured catalog) to locate the + cursor. Returns `None` when the cursor field is unknown or absent. """ if not stream_state: return None - # If we know the cursor field, look for it directly (supports dot-delimited paths) - if cursor_field: - current: Any = stream_state - for segment in cursor_field.split("."): - if isinstance(current, dict) and segment in current: - current = current[segment] - else: - current = None - break - if current is not None: - return str(current) - - # Try common cursor field names as fallback - common_cursor_names = ["cursor", "updated_at", "date", "timestamp"] - for name in common_cursor_names: - if name in stream_state: - val = stream_state[name] - if val is not None: - return str(val) - - # Last resort: check for a single string value that parses as datetime - string_values = [str(v) for v in stream_state.values() if v is not None and isinstance(v, str)] - datetime_values = [(v, _try_parse_datetime_cursor(v)) for v in string_values] - parsed = [(v, dt) for v, dt in datetime_values if dt is not None] - if len(parsed) == 1: - return parsed[0][0] + if not cursor_field: + return None + + # Traverse dot-delimited paths (e.g. "metadata.updated_at") + current: Any = stream_state + for segment in cursor_field.split("."): + if isinstance(current, dict) and segment in current: + current = current[segment] + else: + return None + + if current is not None: + return str(current) return None @@ -177,12 +158,12 @@ def _build_previous_cursor_map( each stream, returning a lookup dict. """ result: dict[tuple[str, str | None], str | None] = {} - try: - prev_state = ConnectionStateResponse(**previous_state_data) - prev_streams: list[StreamState] = _get_stream_list(prev_state) - except (ValidationError, TypeError, KeyError): + if not isinstance(previous_state_data, dict): return result + prev_state = ConnectionStateResponse(**previous_state_data) + prev_streams: list[StreamState] = _get_stream_list(prev_state) + for stream in prev_streams: s_name = stream.stream_descriptor.name s_ns = stream.stream_descriptor.namespace @@ -286,11 +267,11 @@ def _compute_progress_pct( 1. *Historical backfill* — the cursor is at or behind the previous bookmark (e.g. GA4 re-processing from an earlier date). Progress is - measured as ``(cursor - first_seen) / (prev_bookmark - first_seen)``. + measured as `(cursor - first_seen) / (prev_bookmark - first_seen)`. 2. *Standard forward progress* — the cursor advances beyond the - baseline toward ``now``. Progress is - ``(cursor - range_start) / (now - range_start)``. + baseline toward `now`. Progress is + `(cursor - range_start) / (now - range_start)`. """ # --- Historical backfill path --- if ( @@ -367,13 +348,13 @@ def compute_stream_progress( Baseline selection uses a tiered fallback: - 1. Previous completed sync's cursor from ``previous_state_data``. - 2. First-observed cursor during polling (``first_seen_cursors``). - 3. ``sync_start_time`` (wall-clock job start). + 1. Previous completed sync's cursor from `previous_state_data`. + 2. First-observed cursor during polling (`first_seen_cursors`). + 3. `sync_start_time` (wall-clock job start). Tier 3 works for real-time incremental syncs where cursors advance - near wall-clock time, but yields ``progress_pct = None`` for - historical back-fills where the cursor is behind ``sync_start_time``. + near wall-clock time, but yields `progress_pct = None` for + historical back-fills where the cursor is behind `sync_start_time`. """ if now is None: now = datetime.now(timezone.utc) @@ -389,12 +370,15 @@ def compute_stream_progress( if previous_state_data: prev_cursor_map = _build_previous_cursor_map(previous_state_data, catalog_data) - try: - state = ConnectionStateResponse(**state_data) - streams: list[StreamState] = _get_stream_list(state) - except (ValidationError, TypeError, KeyError): - logger.warning("Failed to parse connection state data; returning empty progress.") - streams = [] + if not isinstance(state_data, dict): + logger.warning( + "Expected dict for state_data, got %s; returning empty progress.", + type(state_data).__name__, + ) + return [] + + state = ConnectionStateResponse(**state_data) + streams: list[StreamState] = _get_stream_list(state) return [ _compute_single_stream_progress( From bfed2b9c723c7a5a36356ec9b490da21f295859f Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 02:32:44 +0000 Subject: [PATCH 14/30] fix: resolve catalog lookup for syncCatalog nesting in progress computation The Config API returns streams under syncCatalog.streams, but _extract_cursor_field_from_catalog was looking for catalog.streams at the top level. This caused cursor_field to always be None, preventing first_seen_cursors from populating and blocking the historical backfill progress path. Now handles both raw catalog and full connection response formats. --- airbyte/cloud/_sync_progress.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/airbyte/cloud/_sync_progress.py b/airbyte/cloud/_sync_progress.py index c213791b5..41ed7d702 100644 --- a/airbyte/cloud/_sync_progress.py +++ b/airbyte/cloud/_sync_progress.py @@ -95,7 +95,12 @@ def _extract_cursor_field_from_catalog( Returns the cursor field name, or `None` if the stream is not found or does not have a cursor field configured. """ + # Handle both raw catalog ({"streams": [...]}) and full connection + # response ({"syncCatalog": {"streams": [...]}}) from the Config API. streams = catalog.get("streams", []) + if not streams and "syncCatalog" in catalog: + streams = catalog["syncCatalog"].get("streams", []) + for stream_entry in streams: config = stream_entry.get("config", {}) stream_info = stream_entry.get("stream", {}) From 764b2d449060281eb47fd4f85ac94038cc174c5b Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 03:21:39 +0000 Subject: [PATCH 15/30] fix: override progress to 100% when job status is SUCCEEDED --- airbyte/cloud/sync_results.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index eb27942a6..160e1952d 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -126,7 +126,7 @@ _find_cursor_value_in_state, compute_stream_progress, ) -from airbyte.cloud.constants import FAILED_STATUSES, FINAL_STATUSES +from airbyte.cloud.constants import FAILED_STATUSES, FINAL_STATUSES, JobStatusEnum from airbyte.datasets import CachedDataset from airbyte.exceptions import AirbyteConnectionSyncError, AirbyteConnectionSyncTimeoutError @@ -143,7 +143,7 @@ if TYPE_CHECKING: import sqlalchemy - from airbyte._util.api_imports import ConnectionResponse, JobResponse, JobStatusEnum + from airbyte._util.api_imports import ConnectionResponse, JobResponse from airbyte.caches.base import CacheBase from airbyte.cloud.connections import CloudConnection from airbyte.cloud.workspaces import CloudWorkspace @@ -664,6 +664,16 @@ def _poll_until_complete_with_rich( first_seen_cursors=first_seen_cursors, ) + # Override progress to 100% for successful syncs. The formula + # compares cursors against `now`, so a source whose data stops + # before "today" (e.g. GA4 data through 2025-12-27 when today + # is 2026-04-04) would otherwise show <100% even after the job + # completes successfully. + if latest_status == JobStatusEnum.SUCCEEDED: + for entry in stream_progress: + if entry.get("progress_pct") is not None: + entry["progress_pct"] = 1.0 + elapsed = time.time() - start_time table = _build_rich_table( stream_progress=stream_progress, From 032710a37c07266213e7fa799c31aeef1ac88c55 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 04:15:09 +0000 Subject: [PATCH 16/30] feat: add start time, end time, and elapsed to Rich table caption --- airbyte/cloud/sync_results.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index 160e1952d..6c32bcf07 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -176,6 +176,7 @@ def _build_rich_table( stream_progress: list[dict[str, Any]], job_status: str, elapsed_secs: float, + sync_start_time: datetime | None = None, ) -> Table: """Build a Rich `Table` showing per-stream sync progress.""" elapsed_str = _format_elapsed(elapsed_secs) @@ -189,7 +190,20 @@ def _build_rich_table( f"Streams: {streams_with_pct}/{total_streams} reporting progress" ) - table = Table(title=title, show_lines=False, expand=True) + # Build a caption with start / end / elapsed timestamps + caption_parts: list[str] = [] + if sync_start_time is not None: + caption_parts.append(f"Start: {sync_start_time:%Y-%m-%d %H:%M:%S} UTC") + end_time = datetime.now(timezone.utc) + caption_parts.extend( + [ + f"Current: {end_time:%Y-%m-%d %H:%M:%S} UTC", + f"Elapsed: {elapsed_str}", + ] + ) + caption = " | ".join(caption_parts) + + table = Table(title=title, caption=caption, show_lines=False, expand=True) table.add_column("Stream", style="cyan", no_wrap=True) table.add_column("Progress", justify="right", style="green") table.add_column("Cursor Value", style="yellow") @@ -679,6 +693,7 @@ def _poll_until_complete_with_rich( stream_progress=stream_progress, job_status=str(latest_status), elapsed_secs=elapsed, + sync_start_time=sync_start_time_dt, ) live.update(table, refresh=True) From 1d2ade4fd3569c11e400061788abe1a2a274340b Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 04:19:25 +0000 Subject: [PATCH 17/30] feat: use catalog stream count as denominator for progress reporting --- airbyte/cloud/sync_results.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index 6c32bcf07..04fc7afff 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -177,12 +177,15 @@ def _build_rich_table( job_status: str, elapsed_secs: float, sync_start_time: datetime | None = None, + total_selected_streams: int | None = None, ) -> Table: """Build a Rich `Table` showing per-stream sync progress.""" elapsed_str = _format_elapsed(elapsed_secs) streams_with_pct = sum(1 for s in stream_progress if s.get("progress_pct") is not None) - total_streams = len(stream_progress) + # Use the catalog stream count as the denominator when available; + # fall back to the number of streams currently reporting state. + total_streams = total_selected_streams or len(stream_progress) title = ( f"Sync Progress | Status: {job_status} | " @@ -634,6 +637,9 @@ def _poll_until_complete_with_rich( # and values are the raw cursor string captured on first sighting. first_seen_cursors: dict[tuple[str, str | None], str] = {} + # Total selected streams from catalog (resolved after first fetch). + catalog_stream_count: int | None = None + while True: latest_status = self.get_job_status() @@ -648,6 +654,13 @@ def _poll_until_complete_with_rich( ) catalog_fetched = True + # Resolve total selected streams from the catalog. + if catalog_data: + cat_streams = catalog_data.get("streams", []) + if not cat_streams and "syncCatalog" in catalog_data: + cat_streams = catalog_data["syncCatalog"].get("streams", []) + catalog_stream_count = len(cat_streams) if cat_streams else None + # Fetch current state and compute progress state_data = api_util.get_connection_state( connection_id=self.connection.connection_id, @@ -694,6 +707,7 @@ def _poll_until_complete_with_rich( job_status=str(latest_status), elapsed_secs=elapsed, sync_start_time=sync_start_time_dt, + total_selected_streams=catalog_stream_count, ) live.update(table, refresh=True) From d9bbcdb7017f4695c53ea157f1dcd032924777bf Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 04:24:22 +0000 Subject: [PATCH 18/30] fix: filter catalog streams by selected=True for accurate denominator --- airbyte/cloud/sync_results.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index 04fc7afff..f2b32ed4c 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -654,12 +654,16 @@ def _poll_until_complete_with_rich( ) catalog_fetched = True - # Resolve total selected streams from the catalog. + # Resolve total *selected* streams from the catalog. if catalog_data: cat_streams = catalog_data.get("streams", []) if not cat_streams and "syncCatalog" in catalog_data: cat_streams = catalog_data["syncCatalog"].get("streams", []) - catalog_stream_count = len(cat_streams) if cat_streams else None + if cat_streams: + selected = [ + s for s in cat_streams if s.get("config", {}).get("selected", False) + ] + catalog_stream_count = len(selected) if selected else len(cat_streams) # Fetch current state and compute progress state_data = api_util.get_connection_state( From 4ecc64a8077bb5aa4cf30ce31ad4c85052dbc2a2 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 04:56:23 +0000 Subject: [PATCH 19/30] feat: enhance Rich table with records/bytes throughput, remove cursor columns --- airbyte/cloud/sync_results.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index f2b32ed4c..6b93d5096 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -172,12 +172,25 @@ def _resolve_rich_interval(*, with_rich_status_updates: bool | int) -> float: return float(interval) +def _format_bytes(num_bytes: int) -> str: + """Format a byte count as a human-readable string (e.g. ``1.2 MB``).""" + if num_bytes < 1_000: # noqa: PLR2004 # Byte thresholds are self-documenting + return f"{num_bytes} B" + if num_bytes < 1_000_000: # noqa: PLR2004 + return f"{num_bytes / 1_000:,.1f} KB" + if num_bytes < 1_000_000_000: # noqa: PLR2004 + return f"{num_bytes / 1_000_000:,.1f} MB" + return f"{num_bytes / 1_000_000_000:,.2f} GB" + + def _build_rich_table( stream_progress: list[dict[str, Any]], job_status: str, elapsed_secs: float, sync_start_time: datetime | None = None, total_selected_streams: int | None = None, + records_synced: int = 0, + bytes_synced: int = 0, ) -> Table: """Build a Rich `Table` showing per-stream sync progress.""" elapsed_str = _format_elapsed(elapsed_secs) @@ -187,11 +200,23 @@ def _build_rich_table( # fall back to the number of streams currently reporting state. total_streams = total_selected_streams or len(stream_progress) + # Build throughput string (records/sec, bytes/sec) like Source.read() + throughput_parts: list[str] = [] + if records_synced: + throughput_parts.append(f"{records_synced:,} records") + if bytes_synced: + throughput_parts.append(_format_bytes(bytes_synced)) + if records_synced and elapsed_secs > 0: + rps = records_synced / elapsed_secs + throughput_parts.append(f"{rps:,.1f} records/s") + title = ( f"Sync Progress | Status: {job_status} | " f"Elapsed: {elapsed_str} | " f"Streams: {streams_with_pct}/{total_streams} reporting progress" ) + if throughput_parts: + title += f" | {', '.join(throughput_parts)}" # Build a caption with start / end / elapsed timestamps caption_parts: list[str] = [] @@ -209,22 +234,16 @@ def _build_rich_table( table = Table(title=title, caption=caption, show_lines=False, expand=True) table.add_column("Stream", style="cyan", no_wrap=True) table.add_column("Progress", justify="right", style="green") - table.add_column("Cursor Value", style="yellow") - table.add_column("Previous Cursor", style="dim") table.add_column("Status / Reason", style="dim") for entry in stream_progress: pct = entry.get("progress_pct") pct_str = f"{pct:.1%}" if pct is not None else "--" - cursor_val = entry.get("cursor_value") or "--" - prev_cursor = entry.get("previous_cursor_value") or "--" reason = entry.get("reason") or "" table.add_row( entry.get("stream_name", "?"), pct_str, - str(cursor_val), - str(prev_cursor), reason, ) @@ -706,12 +725,15 @@ def _poll_until_complete_with_rich( entry["progress_pct"] = 1.0 elapsed = time.time() - start_time + job_info = self._latest_job_info table = _build_rich_table( stream_progress=stream_progress, job_status=str(latest_status), elapsed_secs=elapsed, sync_start_time=sync_start_time_dt, total_selected_streams=catalog_stream_count, + records_synced=(job_info.rows_synced or 0) if job_info else 0, + bytes_synced=(job_info.bytes_synced or 0) if job_info else 0, ) live.update(table, refresh=True) From 7171e2e0c80d9fa8e9b7fff0b1d9a6e0373acfe4 Mon Sep 17 00:00:00 2001 From: "Aaron (AJ) Steers" Date: Mon, 6 Apr 2026 13:51:51 -0700 Subject: [PATCH 20/30] fix: fix secret resolution and debug prints --- examples/run_cloud_sync_with_rich_progress.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/examples/run_cloud_sync_with_rich_progress.py b/examples/run_cloud_sync_with_rich_progress.py index ba84dfafd..d60260867 100644 --- a/examples/run_cloud_sync_with_rich_progress.py +++ b/examples/run_cloud_sync_with_rich_progress.py @@ -37,12 +37,15 @@ def main() -> None: """Trigger a Cloud sync and display a Rich Live progress table.""" workspace = CloudWorkspace( workspace_id=WORKSPACE_ID, - api_key=ab.get_secret("AIRBYTE_CLOUD_API_KEY"), + client_id=ab.get_secret("AIRBYTE_CLOUD_CLIENT_ID"), + client_secret=ab.get_secret("AIRBYTE_CLOUD_CLIENT_SECRET"), + # api_key=ab.get_secret("AIRBYTE_CLOUD_API_KEY"), ) connection = workspace.get_connection(connection_id=CONNECTION_ID) - print(f"Connection: {connection.connection_id}") - print(f"Streams: {connection.stream_names}") + print(f"Connection ID: {connection.connection_id}") + print(f"Connection URL: {connection.connection_url}") + print(f"Streams: {connection.stream_names}") print() print("Starting sync with Rich status updates (15 s refresh) ...") print("(The Rich table renders to stderr; watch your terminal.)") From d79ed041826b2244dfe4b592f05a0457063c5217 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:25:10 +0000 Subject: [PATCH 21/30] feat: add JSONL progress audit logging to Rich polling loop --- airbyte/cloud/connections.py | 6 ++++ airbyte/cloud/sync_results.py | 33 +++++++++++++++++++ examples/run_cloud_sync_with_rich_progress.py | 1 + 3 files changed, 40 insertions(+) diff --git a/airbyte/cloud/connections.py b/airbyte/cloud/connections.py index 4da4f811d..a1d17cae6 100644 --- a/airbyte/cloud/connections.py +++ b/airbyte/cloud/connections.py @@ -264,6 +264,7 @@ def run_sync( wait: bool = True, wait_timeout: int = 300, with_rich_status_updates: bool | int = False, + progress_log_path: str | None = None, ) -> SyncResult: """Run a sync. @@ -271,6 +272,10 @@ def run_sync( showing per-stream progress is displayed while waiting for completion. Requires `wait=True`; passing `wait=False` with a truthy `with_rich_status_updates` raises `ValueError`. + + When `progress_log_path` is set, each Rich polling iteration + appends a JSONL line to the given file with timestamped + per-stream progress data for auditing. """ if not wait and with_rich_status_updates: raise ValueError( @@ -306,6 +311,7 @@ def run_sync( raise_failure=True, raise_timeout=True, with_rich_status_updates=with_rich_status_updates, + progress_log_path=progress_log_path, ) return sync_result diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index 6b93d5096..9e4b463c9 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -100,11 +100,13 @@ from __future__ import annotations +import json import time import warnings from collections.abc import Iterator, Mapping from dataclasses import asdict, dataclass from datetime import datetime, timezone +from pathlib import Path from typing import TYPE_CHECKING, Any from pydantic import ValidationError @@ -557,6 +559,7 @@ def wait_for_completion( raise_timeout: bool = True, raise_failure: bool = False, with_rich_status_updates: bool | int = False, + progress_log_path: str | Path | None = None, ) -> JobStatusEnum: """Wait for a job to finish running. @@ -566,6 +569,10 @@ def wait_for_completion( seconds (minimum 15s -- values below 15 are clamped with a warning). The rich polling interval replaces `JOB_WAIT_INTERVAL_SECS` as the sole loop cadence. + + When `progress_log_path` is set (requires Rich updates enabled), + each polling iteration appends a JSONL line to the given file + with timestamped per-stream progress data for auditing. """ poll_interval: float = api_util.JOB_WAIT_INTERVAL_SECS rich_enabled = bool(with_rich_status_updates) @@ -575,6 +582,8 @@ def wait_for_completion( with_rich_status_updates=with_rich_status_updates, ) + log_path: Path | None = Path(progress_log_path) if progress_log_path else None + start_time = time.time() if not rich_enabled: @@ -598,6 +607,7 @@ def wait_for_completion( wait_timeout=wait_timeout, raise_timeout=raise_timeout, raise_failure=raise_failure, + progress_log_path=log_path, ) finally: live.stop() @@ -645,6 +655,7 @@ def _poll_until_complete_with_rich( wait_timeout: int, raise_timeout: bool, raise_failure: bool, + progress_log_path: Path | None = None, ) -> JobStatusEnum: """Polling loop with Rich Live table showing per-stream progress.""" previous_state: dict[str, Any] | None = self._pre_sync_state @@ -737,6 +748,28 @@ def _poll_until_complete_with_rich( ) live.update(table, refresh=True) + # Write JSONL progress log entry when a log path is configured. + if progress_log_path is not None: + log_entry = { + "timestamp": datetime.now(timezone.utc).isoformat(), + "elapsed_secs": round(elapsed, 1), + "job_status": str(latest_status), + "records_synced": (job_info.rows_synced or 0) if job_info else 0, + "bytes_synced": (job_info.bytes_synced or 0) if job_info else 0, + "streams": [ + { + "stream_name": e.get("stream_name"), + "progress_pct": e.get("progress_pct"), + "cursor_value": e.get("cursor_value"), + "previous_cursor_value": e.get("previous_cursor_value"), + "reason": e.get("reason"), + } + for e in stream_progress + ], + } + with progress_log_path.open("a") as f: + f.write(json.dumps(log_entry) + "\n") + if latest_status in FINAL_STATUSES: if raise_failure: self.raise_failure_status() diff --git a/examples/run_cloud_sync_with_rich_progress.py b/examples/run_cloud_sync_with_rich_progress.py index d60260867..61e14c557 100644 --- a/examples/run_cloud_sync_with_rich_progress.py +++ b/examples/run_cloud_sync_with_rich_progress.py @@ -54,6 +54,7 @@ def main() -> None: sync_result = connection.run_sync( wait_timeout=60 * 60, # 1 hour with_rich_status_updates=True, # 15s default refresh + progress_log_path="sync_progress.jsonl", # audit log ) print() From 343b2d7b196f46d2ca78a19c712b7df298556141 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:34:44 +0000 Subject: [PATCH 22/30] feat: add records/bytes proof-of-life progress from Config API streamStats - Adds api_util.get_job_debug_info() wrapper around POST /v1/jobs/get_debug_info - Polls per-stream recordsEmitted/bytesEmitted from the latest attempt on every Rich Live iteration (these counters update mid-sync, unlike cursor state) - Rich table now shows per-stream Records / Bytes / Records % / Cursor % / Stream Status columns, so syncs show activity even when cursor-based progress can't compute a percentage - Previous completed sync's streamStats (fetched once before triggering the new sync) is used as the rough denominator for Records % - JSONL progress log entries now include records_emitted, bytes_emitted, records_progress, and previous_records_emitted per stream --- airbyte/_util/api_util.py | 45 +++++++++ airbyte/cloud/connections.py | 38 +++++++- airbyte/cloud/sync_results.py | 172 +++++++++++++++++++++++++++++----- 3 files changed, 233 insertions(+), 22 deletions(-) diff --git a/airbyte/_util/api_util.py b/airbyte/_util/api_util.py index 2864ba765..c45b3ac36 100644 --- a/airbyte/_util/api_util.py +++ b/airbyte/_util/api_util.py @@ -2104,6 +2104,51 @@ def get_workspace_organization_info( ) +def get_job_debug_info( + job_id: int, + *, + api_root: str, + client_id: SecretString | None, + client_secret: SecretString | None, + bearer_token: SecretString | None, +) -> dict[str, Any]: + """Get debug info for a job, including per-stream records/bytes stats. + + Uses the Config API endpoint: `POST /v1/jobs/get_debug_info`. + + The `streamStats` entries returned for the latest attempt update in + real-time during a running sync, making this call a useful + "proof-of-life" progress signal even when cursor-based progress + cannot be computed (e.g. because the state API returns frozen + cursors mid-sync). + + The response shape looks roughly like: + + ``` + { + "job": {...}, + "attempts": [ + {"attempt": {"streamStats": [ + {"streamName": "contacts", + "stats": {"recordsEmitted": N, "bytesEmitted": N, ...}} + ]}} + ] + } + ``` + + Returns: + The decoded JSON payload from the Config API. + """ + return _make_config_api_request( + path="/jobs/get_debug_info", + json={"id": job_id}, + api_root=api_root, + client_id=client_id, + client_secret=client_secret, + bearer_token=bearer_token, + ) + + def get_connection_state( connection_id: str, *, diff --git a/airbyte/cloud/connections.py b/airbyte/cloud/connections.py index a1d17cae6..87376c2ed 100644 --- a/airbyte/cloud/connections.py +++ b/airbyte/cloud/connections.py @@ -16,7 +16,7 @@ ) from airbyte.cloud.connectors import CloudDestination, CloudSource from airbyte.cloud.constants import JobStatusEnum -from airbyte.cloud.sync_results import SyncResult +from airbyte.cloud.sync_results import SyncResult, _extract_stream_stats from airbyte.exceptions import AirbyteWorkspaceMismatchError, PyAirbyteInputError @@ -287,8 +287,15 @@ def run_sync( # This gives us the baseline (denominator) for progress calculation, # since the state API only exposes the latest advancing cursor. pre_sync_state: dict[str, Any] | None = None + pre_sync_stream_stats: dict[str, dict[str, int]] | None = None if with_rich_status_updates: pre_sync_state = self.dump_raw_state() + # Fetch the previous completed sync's per-stream records/bytes + # stats so we can use them as a rough denominator for the + # mid-sync records-based progress signal. Best-effort — a + # missing previous sync just means the Records % column will + # render as `--` during the new sync. + pre_sync_stream_stats = self._fetch_latest_sync_stream_stats() connection_response = api_util.run_connection( connection_id=self.connection_id, @@ -303,6 +310,7 @@ def run_sync( connection=self, job_id=connection_response.job_id, _pre_sync_state=pre_sync_state, + _pre_sync_stream_stats=pre_sync_stream_stats, ) if wait: @@ -448,6 +456,34 @@ def get_previous_sync_state( return None + def _fetch_latest_sync_stream_stats(self) -> dict[str, dict[str, int]] | None: + """Fetch per-stream records/bytes stats from the most recent completed sync. + + Used as a rough denominator for the mid-sync records-based + progress signal (Records % column). Walks recent job history to + find the latest `SUCCEEDED` sync and pulls its `streamStats` via + the Config API's `jobs/get_debug_info` endpoint. + + Returns a mapping from stream name to a dict of integer stats + (`records_emitted`, `bytes_emitted`), or `None` if no suitable + previous sync is found. + """ + previous_jobs = self.get_previous_sync_logs(limit=5) + for job in previous_jobs: + if job.get_job_status() != JobStatusEnum.SUCCEEDED: + continue + debug_info = api_util.get_job_debug_info( + job_id=job.job_id, + api_root=self.workspace.api_root, + client_id=self.workspace.client_id, + client_secret=self.workspace.client_secret, + bearer_token=self.workspace.bearer_token, + ) + stats = _extract_stream_stats(debug_info) + if stats: + return stats + return None + # Artifacts @deprecated("Use 'dump_raw_state()' instead.") diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index 9e4b463c9..d7f3aece6 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -130,7 +130,11 @@ ) from airbyte.cloud.constants import FAILED_STATUSES, FINAL_STATUSES, JobStatusEnum from airbyte.datasets import CachedDataset -from airbyte.exceptions import AirbyteConnectionSyncError, AirbyteConnectionSyncTimeoutError +from airbyte.exceptions import ( + AirbyteConnectionSyncError, + AirbyteConnectionSyncTimeoutError, + AirbyteError, +) DEFAULT_SYNC_TIMEOUT_SECONDS = 30 * 60 # 30 minutes @@ -185,7 +189,39 @@ def _format_bytes(num_bytes: int) -> str: return f"{num_bytes / 1_000_000_000:,.2f} GB" -def _build_rich_table( +def _extract_stream_stats(debug_info: dict[str, Any]) -> dict[str, dict[str, int]]: + """Extract per-stream `recordsEmitted` / `bytesEmitted` from a debug-info payload. + + The Config API's `jobs/get_debug_info` endpoint returns an `attempts` + list; the latest attempt's `streamStats` updates in real-time during + a running sync and is our primary mid-sync proof-of-life signal. + + Returns a mapping from stream name to a dict of integer stats + (`records_emitted`, `bytes_emitted`). Missing or malformed payloads + yield an empty dict. + """ + attempts = debug_info.get("attempts") or [] + if not attempts: + return {} + + latest_attempt = attempts[-1] + attempt_inner = latest_attempt.get("attempt") or latest_attempt + stream_stats_list = attempt_inner.get("streamStats") or [] + + result: dict[str, dict[str, int]] = {} + for entry in stream_stats_list: + stream_name = entry.get("streamName") or entry.get("stream_name") + if not stream_name: + continue + stats = entry.get("stats") or {} + result[stream_name] = { + "records_emitted": int(stats.get("recordsEmitted") or 0), + "bytes_emitted": int(stats.get("bytesEmitted") or 0), + } + return result + + +def _build_rich_table( # noqa: PLR0913, PLR0914, PLR0915, PLR0917 stream_progress: list[dict[str, Any]], job_status: str, elapsed_secs: float, @@ -193,9 +229,20 @@ def _build_rich_table( total_selected_streams: int | None = None, records_synced: int = 0, bytes_synced: int = 0, + stream_stats: dict[str, dict[str, int]] | None = None, + previous_stream_stats: dict[str, dict[str, int]] | None = None, ) -> Table: - """Build a Rich `Table` showing per-stream sync progress.""" + """Build a Rich `Table` showing per-stream sync progress. + + `stream_stats` is the current mid-sync per-stream `recordsEmitted` / + `bytesEmitted` map (from the Config API's `jobs/get_debug_info` + endpoint). `previous_stream_stats` is the same map from the previous + completed sync, used as a rough denominator for the records-based + progress signal. + """ elapsed_str = _format_elapsed(elapsed_secs) + stream_stats = stream_stats or {} + previous_stream_stats = previous_stream_stats or {} streams_with_pct = sum(1 for s in stream_progress if s.get("progress_pct") is not None) # Use the catalog stream count as the denominator when available; @@ -235,17 +282,57 @@ def _build_rich_table( table = Table(title=title, caption=caption, show_lines=False, expand=True) table.add_column("Stream", style="cyan", no_wrap=True) - table.add_column("Progress", justify="right", style="green") - table.add_column("Status / Reason", style="dim") - - for entry in stream_progress: + table.add_column("Records", justify="right", style="magenta") + table.add_column("Bytes", justify="right", style="magenta") + table.add_column("Records %", justify="right", style="yellow") + table.add_column("Cursor %", justify="right", style="green") + table.add_column("Stream Status", style="bold") + table.add_column("Reason", style="dim") + + # Union of stream names from cursor-based progress and records-based stats + # so proof-of-life shows up even when cursor progress can't compute a pct. + progress_by_name: dict[str, dict[str, Any]] = { + e.get("stream_name", "?"): e for e in stream_progress + } + all_names: list[str] = list(progress_by_name.keys()) + all_names.extend(name for name in stream_stats if name not in progress_by_name) + + for name in all_names: + entry = progress_by_name.get(name, {}) pct = entry.get("progress_pct") - pct_str = f"{pct:.1%}" if pct is not None else "--" + cursor_pct_str = f"{pct:.1%}" if pct is not None else "--" reason = entry.get("reason") or "" + stats = stream_stats.get(name) or {} + recs = stats.get("records_emitted", 0) + byts = stats.get("bytes_emitted", 0) + recs_str = f"{recs:,}" if recs else "0" + bytes_str = _format_bytes(byts) if byts else "0 B" + + prev_stats = previous_stream_stats.get(name) or {} + prev_recs = prev_stats.get("records_emitted", 0) + if prev_recs > 0: + records_pct = min(recs / prev_recs, 1.0) + records_pct_str = f"{records_pct:.1%}" + else: + records_pct_str = "--" + + if recs > 0: + stream_status = ( + "running" + if job_status.lower() not in {"succeeded", "failed"} + else ("complete" if job_status.lower() == "succeeded" else "failed") + ) + else: + stream_status = "pending" + table.add_row( - entry.get("stream_name", "?"), - pct_str, + name, + recs_str, + bytes_str, + records_pct_str, + cursor_pct_str, + stream_status, reason, ) @@ -401,6 +488,7 @@ class SyncResult: _cache: CacheBase | None = None _job_with_attempts_info: dict[str, Any] | None = None _pre_sync_state: dict[str, Any] | None = None + _pre_sync_stream_stats: dict[str, dict[str, int]] | None = None @property def job_url(self) -> str: @@ -646,7 +734,7 @@ def _poll_until_complete( time.sleep(poll_interval) - def _poll_until_complete_with_rich( + def _poll_until_complete_with_rich( # noqa: PLR0912, PLR0914, PLR0915 self, *, live: RichLive, @@ -659,6 +747,7 @@ def _poll_until_complete_with_rich( ) -> JobStatusEnum: """Polling loop with Rich Live table showing per-stream progress.""" previous_state: dict[str, Any] | None = self._pre_sync_state + previous_stream_stats: dict[str, dict[str, int]] = self._pre_sync_stream_stats or {} catalog_data: dict[str, Any] | None = None catalog_fetched = False @@ -735,6 +824,26 @@ def _poll_until_complete_with_rich( if entry.get("progress_pct") is not None: entry["progress_pct"] = 1.0 + # Fetch live per-stream records/bytes from the Config API's + # `jobs/get_debug_info` endpoint. These counters update + # mid-sync and serve as the primary proof-of-life signal when + # cursor-based progress can't compute a percentage. + current_stream_stats: dict[str, dict[str, int]] = {} + try: + debug_info = api_util.get_job_debug_info( + job_id=self.job_id, + api_root=self.workspace.api_root, + client_id=self.workspace.client_id, + client_secret=self.workspace.client_secret, + bearer_token=self.workspace.bearer_token, + ) + except AirbyteError: + # Progress signal is best-effort; swallow API errors and + # render `--` rather than failing the sync polling loop. + debug_info = {} + if debug_info: + current_stream_stats = _extract_stream_stats(debug_info) + elapsed = time.time() - start_time job_info = self._latest_job_info table = _build_rich_table( @@ -745,27 +854,48 @@ def _poll_until_complete_with_rich( total_selected_streams=catalog_stream_count, records_synced=(job_info.rows_synced or 0) if job_info else 0, bytes_synced=(job_info.bytes_synced or 0) if job_info else 0, + stream_stats=current_stream_stats, + previous_stream_stats=previous_stream_stats, ) live.update(table, refresh=True) # Write JSONL progress log entry when a log path is configured. if progress_log_path is not None: + log_streams: list[dict[str, Any]] = [] + progress_names = {e.get("stream_name"): e for e in stream_progress} + all_names = list(progress_names.keys()) + all_names.extend( + name for name in current_stream_stats if name not in progress_names + ) + + for name in all_names: + entry = progress_names.get(name, {"stream_name": name}) + stats = current_stream_stats.get(name) or {} + prev_stats = previous_stream_stats.get(name) or {} + prev_recs = prev_stats.get("records_emitted", 0) + recs = stats.get("records_emitted", 0) + records_progress = min(recs / prev_recs, 1.0) if prev_recs > 0 else None + log_streams.append( + { + "stream_name": entry.get("stream_name", name), + "progress_pct": entry.get("progress_pct"), + "cursor_value": entry.get("cursor_value"), + "previous_cursor_value": entry.get("previous_cursor_value"), + "reason": entry.get("reason"), + "records_emitted": recs, + "bytes_emitted": stats.get("bytes_emitted", 0), + "records_progress": records_progress, + "previous_records_emitted": prev_recs, + } + ) + log_entry = { "timestamp": datetime.now(timezone.utc).isoformat(), "elapsed_secs": round(elapsed, 1), "job_status": str(latest_status), "records_synced": (job_info.rows_synced or 0) if job_info else 0, "bytes_synced": (job_info.bytes_synced or 0) if job_info else 0, - "streams": [ - { - "stream_name": e.get("stream_name"), - "progress_pct": e.get("progress_pct"), - "cursor_value": e.get("cursor_value"), - "previous_cursor_value": e.get("previous_cursor_value"), - "reason": e.get("reason"), - } - for e in stream_progress - ], + "streams": log_streams, } with progress_log_path.open("a") as f: f.write(json.dumps(log_entry) + "\n") From 7240d6f0555a8a28c6c3b3b415213c363defe68d Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:42:29 +0000 Subject: [PATCH 23/30] feat: observe source/destination STATE messages for local sync progress Add a local-sync progress tracking layer to ProgressTracker that intercepts AirbyteStateMessage instances flowing through the local pipeline and caches per-stream cursor values: - tally_records_read() now observes source-side state messages and records baseline and latest cursor values per stream. - tally_pending_writes() observes the same source-side cursors on the source -> destination path. - tally_confirmed_writes() observes destination-acknowledged cursors as the committed cursor per stream. A new airbyte._local_sync_progress helper module extracts cursor fields from common field names (updatedAt, created_at, etc.) with a datetime-parseable fallback, normalizing both dict and AirbyteStateBlob stream_state shapes. A simple formula (latest - baseline) / (now - baseline) yields a per-stream progress percentage for datetime cursors. The Rich status message renders per-stream cursor + progress info, and every _update_display() also appends a JSONL snapshot to $AIRBYTE_LOGGING_ROOT//progress-.jsonl for offline inspection. --- airbyte/_local_sync_progress.py | 199 ++++++++++++++++++ airbyte/progress.py | 194 ++++++++++++++++- tests/unit_tests/test_local_sync_progress.py | 207 +++++++++++++++++++ 3 files changed, 597 insertions(+), 3 deletions(-) create mode 100644 airbyte/_local_sync_progress.py create mode 100644 tests/unit_tests/test_local_sync_progress.py diff --git a/airbyte/_local_sync_progress.py b/airbyte/_local_sync_progress.py new file mode 100644 index 000000000..1ba8ca285 --- /dev/null +++ b/airbyte/_local_sync_progress.py @@ -0,0 +1,199 @@ +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +"""Local-sync progress tracking via direct observation of state messages. + +When PyAirbyte runs a sync locally (`Source.read()`, or `Source` -> `Destination` +via `tally_pending_writes` / `tally_confirmed_writes`), it acts as the in-process +intermediary that buffers every `AirbyteMessage` on its way from the source to the +cache/destination. This gives PyAirbyte the ability to directly observe both: + +- **Source-side cursors**: state messages emitted by the source as it advances + through its records (tracked in `ProgressTracker.tally_records_read`). +- **Destination-committed cursors**: state messages acknowledged by the + destination after batches are committed (tracked in + `ProgressTracker.tally_confirmed_writes`). + +This module provides small helpers used by `airbyte.progress.ProgressTracker` +to extract cursor values from state messages, compute a simple progress +percentage for datetime cursors, and serialize per-stream progress snapshots +for JSONL audit logging. + +This is intentionally distinct from `airbyte.cloud._sync_progress`, which +reconstructs progress from snapshots returned by the Airbyte Platform Config +API. The local-sync path has direct access to every state message and does +not require an external API call. +""" + +from __future__ import annotations + +from datetime import datetime, timezone +from typing import TYPE_CHECKING, Any + +from airbyte_cdk.utils.datetime_helpers import ab_datetime_try_parse + + +if TYPE_CHECKING: + from airbyte_protocol.models import AirbyteStateMessage + + +# Field names commonly used as datetime cursors by Airbyte connectors. +# Checked in order when multiple keys exist in `stream_state`. +_COMMON_CURSOR_FIELDS: tuple[str, ...] = ( + "updatedAt", + "updated_at", + "createdAt", + "created_at", + "timestamp", + "cursor", + "date", + "modified", + "modified_at", + "last_modified", + "lastModified", +) + + +def _try_parse_datetime_cursor(value: str) -> datetime | None: + """Attempt to parse a string as a datetime. + + Delegates to the CDK's `ab_datetime_try_parse` and rejects pure numeric + strings (which the CDK parser would otherwise interpret as epoch timestamps). + Returns `None` when the value cannot be parsed as a datetime. + """ + stripped = value.strip() + if not stripped: + return None + + try: + float(stripped) + except ValueError: + pass + else: + return None + + dt = ab_datetime_try_parse(stripped) + if dt is None: + return None + + if dt.tzinfo is None: + dt = dt.replace(tzinfo=timezone.utc) + return dt + + +def _normalize_stream_state(stream_state: object) -> dict[str, Any] | None: + """Normalize a `stream_state` value to a plain `dict`. + + The Airbyte protocol models typically represent `stream_state` as an + `AirbyteStateBlob` (a Pydantic model with `extra="allow"`) rather than a + raw dict. This helper coerces either form into a dict so downstream + cursor extraction can treat them uniformly. Returns `None` when the + value cannot be represented as a dict. + """ + if stream_state is None: + return None + if isinstance(stream_state, dict): + return stream_state + if hasattr(stream_state, "model_dump"): + dumped = stream_state.model_dump() + if isinstance(dumped, dict): + return dumped + return None + + +def _extract_cursor_from_stream_state( + stream_state: object, +) -> tuple[str | None, str | None]: + """Return `(cursor_field, cursor_value)` from a `stream_state` blob. + + The search prefers well-known cursor field names (`updatedAt`, + `created_at`, etc.). If none of those are present, falls back to the + first top-level value that parses as a datetime. Returns + `(None, None)` when no usable cursor can be extracted. + """ + state_dict = _normalize_stream_state(stream_state) + if not state_dict: + return None, None + + for candidate in _COMMON_CURSOR_FIELDS: + if candidate in state_dict: + raw = state_dict[candidate] + if raw is None: + continue + value = str(raw) + # Always return explicit cursor fields, even non-datetime ones. + return candidate, value + + # Fallback: look for the first datetime-parseable scalar at the top level. + for key, raw in state_dict.items(): + if raw is None or not isinstance(raw, (str, int, float)): + continue + value = str(raw) + if _try_parse_datetime_cursor(value) is not None: + return key, value + + return None, None + + +def extract_cursor_from_state_message( + state_message: AirbyteStateMessage, +) -> tuple[str | None, str | None, str | None]: + """Return `(stream_name, cursor_field, cursor_value)` from a state message. + + Handles `STREAM`-type state messages. `GLOBAL` and `LEGACY` state + messages are not per-stream and return `(None, None, None)` -- callers + should fall back to other tracking strategies for those. + """ + stream = getattr(state_message, "stream", None) + if stream is None: + return None, None, None + + descriptor = getattr(stream, "stream_descriptor", None) + if descriptor is None: + return None, None, None + + stream_name = getattr(descriptor, "name", None) + if not stream_name: + return None, None, None + + cursor_field, cursor_value = _extract_cursor_from_stream_state( + getattr(stream, "stream_state", None) + ) + return stream_name, cursor_field, cursor_value + + +def compute_stream_progress_pct( + *, + baseline_cursor: str | None, + latest_cursor: str | None, + now: datetime | None = None, +) -> float | None: + """Compute a progress percentage for a single stream's datetime cursor. + + The formula is: + + progress = (latest - baseline) / (now - baseline) + + Returns a value clamped to `[0.0, 1.0]`, or `None` when either cursor is + missing, cannot be parsed as a datetime, or when the denominator is not + positive (e.g. a historical backfill where `now` equals the baseline). + """ + if baseline_cursor is None or latest_cursor is None: + return None + + baseline_dt = _try_parse_datetime_cursor(baseline_cursor) + latest_dt = _try_parse_datetime_cursor(latest_cursor) + if baseline_dt is None or latest_dt is None: + return None + + now_dt = now or datetime.now(timezone.utc) + if now_dt.tzinfo is None: + now_dt = now_dt.replace(tzinfo=timezone.utc) + + denominator = (now_dt - baseline_dt).total_seconds() + if denominator <= 0: + return None + + numerator = (latest_dt - baseline_dt).total_seconds() + if numerator < 0: + return 0.0 + + return round(max(0.0, min(1.0, numerator / denominator)), 4) diff --git a/airbyte/progress.py b/airbyte/progress.py index ad984f8a3..b627a66ba 100644 --- a/airbyte/progress.py +++ b/airbyte/progress.py @@ -28,6 +28,7 @@ from enum import Enum, auto from typing import IO, TYPE_CHECKING, Any, Literal, cast +import ulid from rich.console import Console from rich.errors import LiveError from rich.live import Live as RichLive @@ -40,6 +41,10 @@ ) from airbyte import logs +from airbyte._local_sync_progress import ( + compute_stream_progress_pct, + extract_cursor_from_state_message, +) from airbyte._message_iterators import _new_stream_success_message from airbyte._util import meta from airbyte._util.telemetry import ( @@ -47,16 +52,19 @@ EventType, send_telemetry, ) -from airbyte.logs import get_global_file_logger +from airbyte.logs import AIRBYTE_LOGGING_ROOT, get_global_file_logger if TYPE_CHECKING: import logging from collections.abc import Generator, Iterable + from pathlib import Path from types import ModuleType from structlog import BoundLogger + from airbyte_protocol.models import AirbyteStateMessage + from airbyte._message_iterators import AirbyteMessageIterator from airbyte.caches.base import CacheBase from airbyte.destinations.base import Destination @@ -214,11 +222,27 @@ def __init__( self.destination_stream_records_delivered: dict[str, int] = defaultdict(int) self.destination_stream_records_confirmed: dict[str, int] = defaultdict(int) + # State-message cursor tracking (local sync progress). + # `baseline` is the first cursor observed from the source; `latest` is + # updated every time a STATE message is observed from the source. + # `committed` mirrors the cursor on state messages acknowledged by the + # destination. See `airbyte._local_sync_progress` for formula details. + self.stream_baseline_cursors: dict[str, str] = {} + self.stream_latest_cursors: dict[str, str] = {} + self.stream_committed_cursors: dict[str, str] = {} + self.stream_cursor_fields: dict[str, str] = {} + self.stream_latest_cursor_times: dict[str, float] = {} + self.stream_committed_cursor_times: dict[str, float] = {} + # Progress bar properties self._last_update_time: float | None = None self._stderr_console: Console | None = None self._rich_view: RichLive | None = None + # JSONL audit log path -- set lazily on first write. + self._progress_audit_log_path: Path | None = None + self._progress_audit_log_resolved: bool = False + self.reset_progress_style(style) def _print_info_message( @@ -256,7 +280,13 @@ def tally_records_read( *, auto_close_streams: bool = False, ) -> Generator[AirbyteMessage, Any, None]: - """This method simply tallies the number of records processed and yields the messages.""" + """This method simply tallies the number of records processed and yields the messages. + + STATE messages emitted by the source are observed here to extract + per-stream cursor values. The original messages are passed through + unchanged so downstream consumers (caches, destinations) still receive + them. + """ # Update the display before we start. self._log_sync_start() self._start_rich_view() @@ -268,6 +298,9 @@ def tally_records_read( # Yield the message immediately. yield message + if message.state: + self._observe_state_message(message.state, is_committed=False) + if message.record: # If this is the first record, set the start time. if self.first_record_received_time is None: @@ -331,6 +364,9 @@ def tally_pending_writes( # For now at least, we don't need to pay the cost of parsing it. continue + if message.state: + self._observe_state_message(message.state, is_committed=False) + if message.record and message.record.stream: self.destination_stream_records_delivered[message.record.stream] += 1 @@ -358,6 +394,8 @@ def tally_confirmed_writes( self._start_rich_view() # Start Rich's live view if not already running. for message in messages: if message.state: + # Observe the destination-acknowledged cursor before anything else. + self._observe_state_message(message.state, is_committed=True) # This is a state message from the destination. Tally the records written. if message.state.stream and message.state.destinationStats: stream_name = message.state.stream.stream_descriptor.name @@ -377,6 +415,136 @@ def tally_bytes_read(self, bytes_read: int, stream_name: str) -> None: """ self.stream_bytes_read[stream_name] += bytes_read + # Local-sync state observation + + def _observe_state_message( + self, + state_message: AirbyteStateMessage, + *, + is_committed: bool, + ) -> None: + """Observe a STATE message flowing through the local pipeline. + + When `is_committed` is `False`, the message came directly from the + source and advances the `latest` cursor. When `True`, the message was + acknowledged by the destination and advances the `committed` cursor. + + Only per-stream (`STREAM`-type) state messages contribute a + cursor. `GLOBAL` and `LEGACY` state messages are still passed through + the pipeline but are skipped here because they have no single + per-stream cursor value to record. + """ + stream_name, cursor_field, cursor_value = extract_cursor_from_state_message(state_message) + if stream_name is None or cursor_value is None: + return + + now = time.time() + if cursor_field and stream_name not in self.stream_cursor_fields: + self.stream_cursor_fields[stream_name] = cursor_field + + if is_committed: + self.stream_committed_cursors[stream_name] = cursor_value + self.stream_committed_cursor_times[stream_name] = now + return + + # Source-side: record baseline the first time we see a cursor. + if stream_name not in self.stream_baseline_cursors: + self.stream_baseline_cursors[stream_name] = cursor_value + self.stream_latest_cursors[stream_name] = cursor_value + self.stream_latest_cursor_times[stream_name] = now + + @property + def stream_progress_pcts(self) -> dict[str, float]: + """Per-stream datetime-cursor progress estimates. + + Only streams with a datetime-parseable baseline and latest cursor are + included. Values are in the range `[0.0, 1.0]`. + """ + now = datetime.datetime.now(datetime.timezone.utc) + result: dict[str, float] = {} + for stream_name, latest in self.stream_latest_cursors.items(): + baseline = self.stream_baseline_cursors.get(stream_name) + pct = compute_stream_progress_pct( + baseline_cursor=baseline, + latest_cursor=latest, + now=now, + ) + if pct is not None: + result[stream_name] = pct + return result + + def _build_progress_snapshot(self) -> dict[str, Any]: + """Build a point-in-time progress snapshot for JSONL audit logging. + + Includes per-stream record counts, cursor fields/values, and + computed progress percentages when available. + """ + now_dt = datetime.datetime.now(datetime.timezone.utc) + progress_pcts = self.stream_progress_pcts + stream_names = ( + set(self.stream_read_counts) + | set(self.written_stream_names) + | set(self.stream_latest_cursors) + | set(self.stream_committed_cursors) + ) + streams: list[dict[str, Any]] = [ + { + "stream_name": stream_name, + "records_read": self.stream_read_counts.get(stream_name, 0), + "records_delivered": self.destination_stream_records_delivered.get(stream_name, 0), + "records_confirmed": self.destination_stream_records_confirmed.get(stream_name, 0), + "cursor_field": self.stream_cursor_fields.get(stream_name), + "baseline_cursor": self.stream_baseline_cursors.get(stream_name), + "latest_cursor": self.stream_latest_cursors.get(stream_name), + "committed_cursor": self.stream_committed_cursors.get(stream_name), + "progress_pct": progress_pcts.get(stream_name), + } + for stream_name in sorted(stream_names) + ] + return { + "timestamp": now_dt.isoformat(), + "elapsed_secs": round(self.elapsed_seconds, 3), + "total_records_read": self.total_records_read, + "total_records_written": self.total_records_written, + "total_records_delivered": self.total_destination_records_delivered, + "total_records_confirmed": self.total_destination_records_confirmed, + "streams": streams, + } + + def _get_progress_audit_log_path(self) -> Path | None: + """Resolve the JSONL audit log path for this tracker, once per instance.""" + if self._progress_audit_log_resolved: + return self._progress_audit_log_path + + self._progress_audit_log_resolved = True + if AIRBYTE_LOGGING_ROOT is None: + return None + + yyyy_mm_dd = datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%d") + folder = AIRBYTE_LOGGING_ROOT / yyyy_mm_dd + try: + folder.mkdir(parents=True, exist_ok=True) + except OSError: + return None + + self._progress_audit_log_path = folder / f"progress-{ulid.ULID()}.jsonl" + return self._progress_audit_log_path + + def _append_progress_audit_log(self) -> None: + """Append a single JSONL snapshot to the audit log, if available.""" + path = self._get_progress_audit_log_path() + if path is None: + return + + snapshot = self._build_progress_snapshot() + try: + with path.open("a", encoding="utf-8") as fh: + fh.write(json.dumps(snapshot, default=str)) + fh.write("\n") + except OSError: + # Audit logging is best-effort; do not interfere with the sync. + return + # Logging methods @property @@ -609,6 +777,9 @@ def log_success( self.end_time = time.time() self._update_display(force_refresh=True) + audit_path = self._get_progress_audit_log_path() + if audit_path is not None: + self._print_info_message(f"Progress audit log written to `{audit_path}`.") self._stop_rich_view() streams = list(self.stream_read_start_times.keys()) if not streams: @@ -862,9 +1033,10 @@ def _update_display(self, *, force_refresh: bool = False) -> None: elif self.style in {ProgressStyle.PLAIN, ProgressStyle.NONE}: pass + self._append_progress_audit_log() self._last_update_time = time.time() - def _get_status_message(self) -> str: + def _get_status_message(self) -> str: # noqa: PLR0915 # Too many statements """Compile and return a status message.""" # Format start time as a friendly string in local timezone: start_time_str = _to_time_str(self.read_start_time) @@ -911,6 +1083,22 @@ def join_streams_strings(streams_list: list[str]) -> str: + "\n\n" ) + # Cursor progress (from observed source state messages) + if self.stream_latest_cursors: + status_message += "- Cursor progress:\n" + progress_pcts = self.stream_progress_pcts + for stream_name, latest in self.stream_latest_cursors.items(): + cursor_field = self.stream_cursor_fields.get(stream_name) + field_str = f" [`{cursor_field}`]" if cursor_field else "" + pct = progress_pcts.get(stream_name) + pct_str = f" ({pct * 100:.1f}%)" if pct is not None else "" + committed = self.stream_committed_cursors.get(stream_name) + committed_str = f" (committed: `{committed}`)" if committed else "" + status_message += ( + f" - `{stream_name}`{field_str}: `{latest}`{pct_str}{committed_str}\n" + ) + status_message += "\n" + # Source cache writes if self.total_records_written > 0: status_message += ( diff --git a/tests/unit_tests/test_local_sync_progress.py b/tests/unit_tests/test_local_sync_progress.py new file mode 100644 index 000000000..59361c14d --- /dev/null +++ b/tests/unit_tests/test_local_sync_progress.py @@ -0,0 +1,207 @@ +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +"""Tests for local-sync state-message observation in `ProgressTracker`.""" + +from __future__ import annotations + +import json + +import pytest +from airbyte._local_sync_progress import ( + _try_parse_datetime_cursor, + compute_stream_progress_pct, + extract_cursor_from_state_message, +) +from airbyte.progress import ProgressStyle, ProgressTracker +from airbyte_protocol.models import ( + AirbyteMessage, + AirbyteStateMessage, + AirbyteStateType, + AirbyteStreamState, + StreamDescriptor, + Type, +) + + +def _state_msg( + stream: str, cursor_value: str, cursor_field: str = "updatedAt" +) -> AirbyteMessage: + return AirbyteMessage( + type=Type.STATE, + state=AirbyteStateMessage( + type=AirbyteStateType.STREAM, + stream=AirbyteStreamState( + stream_descriptor=StreamDescriptor(name=stream), + stream_state={cursor_field: cursor_value}, + ), + ), + ) + + +def test_try_parse_datetime_cursor_rejects_numeric_strings() -> None: + assert _try_parse_datetime_cursor("12345") is None + assert _try_parse_datetime_cursor("2024-01-01T00:00:00Z") is not None + + +def test_extract_cursor_from_state_message_prefers_known_fields() -> None: + msg = _state_msg("contacts", "2024-06-15T10:30:00Z", cursor_field="updatedAt") + name, field, value = extract_cursor_from_state_message(msg.state) + assert name == "contacts" + assert field == "updatedAt" + assert value == "2024-06-15T10:30:00Z" + + +def test_extract_cursor_falls_back_to_first_datetime_value() -> None: + msg = AirbyteMessage( + type=Type.STATE, + state=AirbyteStateMessage( + type=AirbyteStateType.STREAM, + stream=AirbyteStreamState( + stream_descriptor=StreamDescriptor(name="events"), + stream_state={"unknown_field": "2024-01-01T00:00:00Z"}, + ), + ), + ) + name, field, value = extract_cursor_from_state_message(msg.state) + assert name == "events" + assert field == "unknown_field" + assert value == "2024-01-01T00:00:00Z" + + +def test_compute_stream_progress_pct_basic() -> None: + pct = compute_stream_progress_pct( + baseline_cursor="2024-01-01T00:00:00Z", + latest_cursor="2024-07-01T00:00:00Z", + now=None, + ) + # We're past 2024, so from Jan 1 -> Jul 1 -> today should be a valid [0, 1] + assert pct is None or 0.0 <= pct <= 1.0 + + +def test_compute_stream_progress_pct_returns_none_for_non_datetime() -> None: + assert ( + compute_stream_progress_pct( + baseline_cursor="not-a-date", + latest_cursor="also-not-a-date", + ) + is None + ) + + +def test_tally_records_read_observes_source_state() -> None: + tracker = ProgressTracker( + ProgressStyle.NONE, + source=None, + cache=None, + destination=None, + ) + messages = [ + _state_msg("contacts", "2024-01-01T00:00:00Z"), + _state_msg("contacts", "2024-06-15T10:30:00Z"), + _state_msg("companies", "2024-03-15T00:00:00Z"), + ] + list(tracker.tally_records_read(iter(messages))) + + assert tracker.stream_baseline_cursors == { + "contacts": "2024-01-01T00:00:00Z", + "companies": "2024-03-15T00:00:00Z", + } + assert tracker.stream_latest_cursors == { + "contacts": "2024-06-15T10:30:00Z", + "companies": "2024-03-15T00:00:00Z", + } + assert tracker.stream_cursor_fields == { + "contacts": "updatedAt", + "companies": "updatedAt", + } + + +def test_tally_confirmed_writes_observes_committed_state() -> None: + tracker = ProgressTracker( + ProgressStyle.NONE, + source=None, + cache=None, + destination=None, + ) + messages = [_state_msg("contacts", "2024-06-15T10:30:00Z")] + list(tracker.tally_confirmed_writes(iter(messages))) + + assert tracker.stream_committed_cursors == {"contacts": "2024-06-15T10:30:00Z"} + # Source-side fields should NOT be populated from committed state alone. + assert tracker.stream_baseline_cursors == {} + assert tracker.stream_latest_cursors == {} + + +def test_tally_pending_writes_observes_source_state() -> None: + tracker = ProgressTracker( + ProgressStyle.NONE, + source=None, + cache=None, + destination=None, + ) + messages = [_state_msg("contacts", "2024-02-01T00:00:00Z")] + list(tracker.tally_pending_writes(iter(messages))) + + assert tracker.stream_latest_cursors == {"contacts": "2024-02-01T00:00:00Z"} + + +def test_build_progress_snapshot_shape() -> None: + tracker = ProgressTracker( + ProgressStyle.NONE, + source=None, + cache=None, + destination=None, + ) + list( + tracker.tally_records_read( + iter([ + _state_msg("contacts", "2024-01-01T00:00:00Z"), + _state_msg("contacts", "2024-06-15T10:30:00Z"), + ]) + ) + ) + snapshot = tracker._build_progress_snapshot() # noqa: SLF001 + assert "timestamp" in snapshot + assert "streams" in snapshot + contacts = next(s for s in snapshot["streams"] if s["stream_name"] == "contacts") + assert contacts["baseline_cursor"] == "2024-01-01T00:00:00Z" + assert contacts["latest_cursor"] == "2024-06-15T10:30:00Z" + assert contacts["cursor_field"] == "updatedAt" + + +def test_progress_audit_log_written(tmp_path, monkeypatch) -> None: + monkeypatch.setenv("AIRBYTE_LOGGING_ROOT", str(tmp_path)) + # Override the module-level AIRBYTE_LOGGING_ROOT (resolved at import time). + from airbyte import progress as progress_module + + monkeypatch.setattr(progress_module, "AIRBYTE_LOGGING_ROOT", tmp_path) + + tracker = ProgressTracker( + ProgressStyle.NONE, + source=None, + cache=None, + destination=None, + ) + list( + tracker.tally_records_read( + iter([ + _state_msg("contacts", "2024-01-01T00:00:00Z"), + _state_msg("contacts", "2024-06-15T10:30:00Z"), + ]) + ) + ) + tracker._update_display(force_refresh=True) # noqa: SLF001 + + audit_path = tracker._get_progress_audit_log_path() # noqa: SLF001 + assert audit_path is not None + assert audit_path.exists() + + lines = audit_path.read_text().strip().splitlines() + assert lines, "expected at least one JSONL line" + last = json.loads(lines[-1]) + assert "streams" in last + contacts = next(s for s in last["streams"] if s["stream_name"] == "contacts") + assert contacts["latest_cursor"] == "2024-06-15T10:30:00Z" + + +if __name__ == "__main__": + pytest.main([__file__, "-v"]) From 3e3c3dfc068220870ebddb092db80f9d0c46876e Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:43:44 +0000 Subject: [PATCH 24/30] fix: resolve pyrefly type errors for dict.get on stream_stats - Annotate progress_names as dict[str, dict[str, Any]] so keys narrow to str - Use .get(name, {}) consistently for stream_stats lookups --- airbyte/cloud/sync_results.py | 14 ++++++++------ sync_progress_hubspot.jsonl | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 sync_progress_hubspot.jsonl diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index d7f3aece6..a06d2e4f3 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -303,13 +303,13 @@ def _build_rich_table( # noqa: PLR0913, PLR0914, PLR0915, PLR0917 cursor_pct_str = f"{pct:.1%}" if pct is not None else "--" reason = entry.get("reason") or "" - stats = stream_stats.get(name) or {} + stats = stream_stats.get(name, {}) recs = stats.get("records_emitted", 0) byts = stats.get("bytes_emitted", 0) recs_str = f"{recs:,}" if recs else "0" bytes_str = _format_bytes(byts) if byts else "0 B" - prev_stats = previous_stream_stats.get(name) or {} + prev_stats = previous_stream_stats.get(name, {}) prev_recs = prev_stats.get("records_emitted", 0) if prev_recs > 0: records_pct = min(recs / prev_recs, 1.0) @@ -862,16 +862,18 @@ def _poll_until_complete_with_rich( # noqa: PLR0912, PLR0914, PLR0915 # Write JSONL progress log entry when a log path is configured. if progress_log_path is not None: log_streams: list[dict[str, Any]] = [] - progress_names = {e.get("stream_name"): e for e in stream_progress} - all_names = list(progress_names.keys()) + progress_names: dict[str, dict[str, Any]] = { + str(e.get("stream_name", "")): e for e in stream_progress + } + all_names: list[str] = list(progress_names.keys()) all_names.extend( name for name in current_stream_stats if name not in progress_names ) for name in all_names: entry = progress_names.get(name, {"stream_name": name}) - stats = current_stream_stats.get(name) or {} - prev_stats = previous_stream_stats.get(name) or {} + stats = current_stream_stats.get(name, {}) + prev_stats = previous_stream_stats.get(name, {}) prev_recs = prev_stats.get("records_emitted", 0) recs = stats.get("records_emitted", 0) records_progress = min(recs / prev_recs, 1.0) if prev_recs > 0 else None diff --git a/sync_progress_hubspot.jsonl b/sync_progress_hubspot.jsonl new file mode 100644 index 000000000..27cf72b5f --- /dev/null +++ b/sync_progress_hubspot.jsonl @@ -0,0 +1,19 @@ +{"timestamp": "2026-04-23T21:35:29.928752+00:00", "elapsed_secs": 2.6, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:35:46.576431+00:00", "elapsed_secs": 19.3, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:36:02.964170+00:00", "elapsed_secs": 35.7, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:36:19.209849+00:00", "elapsed_secs": 51.9, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:36:35.622248+00:00", "elapsed_secs": 68.3, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:36:52.348394+00:00", "elapsed_secs": 85.1, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:37:08.732387+00:00", "elapsed_secs": 101.4, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:37:25.168456+00:00", "elapsed_secs": 117.9, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:37:41.616608+00:00", "elapsed_secs": 134.3, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} +{"timestamp": "2026-04-23T21:37:58.149187+00:00", "elapsed_secs": 150.9, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:38:14.661527+00:00", "elapsed_secs": 167.4, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:38:31.351867+00:00", "elapsed_secs": 184.1, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:38:48.056403+00:00", "elapsed_secs": 200.8, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 151, "bytes_emitted": 36863, "records_progress": 0.20405405405405405, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:39:04.720451+00:00", "elapsed_secs": 217.4, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 545, "bytes_emitted": 133043, "records_progress": 0.7364864864864865, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:39:21.415834+00:00", "elapsed_secs": 234.1, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:39:37.955071+00:00", "elapsed_secs": 250.7, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:39:54.664446+00:00", "elapsed_secs": 267.4, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:40:11.292375+00:00", "elapsed_secs": 284.0, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} +{"timestamp": "2026-04-23T21:40:27.940973+00:00", "elapsed_secs": 300.7, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} From 3efd01e9cc7692726cfdf36303bcddd7e1f6904c Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:48:26 +0000 Subject: [PATCH 25/30] chore: remove test artifact from repo --- sync_progress_hubspot.jsonl | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 sync_progress_hubspot.jsonl diff --git a/sync_progress_hubspot.jsonl b/sync_progress_hubspot.jsonl deleted file mode 100644 index 27cf72b5f..000000000 --- a/sync_progress_hubspot.jsonl +++ /dev/null @@ -1,19 +0,0 @@ -{"timestamp": "2026-04-23T21:35:29.928752+00:00", "elapsed_secs": 2.6, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:35:46.576431+00:00", "elapsed_secs": 19.3, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:36:02.964170+00:00", "elapsed_secs": 35.7, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:36:19.209849+00:00", "elapsed_secs": 51.9, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:36:35.622248+00:00", "elapsed_secs": 68.3, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:36:52.348394+00:00", "elapsed_secs": 85.1, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:37:08.732387+00:00", "elapsed_secs": 101.4, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:37:25.168456+00:00", "elapsed_secs": 117.9, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:37:41.616608+00:00", "elapsed_secs": 134.3, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}]} -{"timestamp": "2026-04-23T21:37:58.149187+00:00", "elapsed_secs": 150.9, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:38:14.661527+00:00", "elapsed_secs": 167.4, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:38:31.351867+00:00", "elapsed_secs": 184.1, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:38:48.056403+00:00", "elapsed_secs": 200.8, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 151, "bytes_emitted": 36863, "records_progress": 0.20405405405405405, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:39:04.720451+00:00", "elapsed_secs": 217.4, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 545, "bytes_emitted": 133043, "records_progress": 0.7364864864864865, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:39:21.415834+00:00", "elapsed_secs": 234.1, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:39:37.955071+00:00", "elapsed_secs": 250.7, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:39:54.664446+00:00", "elapsed_secs": 267.4, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:40:11.292375+00:00", "elapsed_secs": 284.0, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} -{"timestamp": "2026-04-23T21:40:27.940973+00:00", "elapsed_secs": 300.7, "job_status": "JobStatusEnum.RUNNING", "records_synced": 0, "bytes_synced": 0, "streams": [{"stream_name": "companies", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:30:14.024000Z", "previous_cursor_value": "2026-04-18T00:30:14.024000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12775, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deal_splits", "progress_pct": 0.0, "cursor_value": "2025-07-21T13:56:21.578000Z", "previous_cursor_value": "2025-07-21T13:56:21.578000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 3260, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "companies_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-23T20:49:43.457000Z", "previous_cursor_value": "2026-04-23T20:49:43.457000Z", "reason": null, "records_emitted": 12, "bytes_emitted": 1969, "records_progress": 1.0, "previous_records_emitted": 12}, {"stream_name": "contact_lists", "progress_pct": 0.0, "cursor_value": "2024-05-21T21:25:32.100000Z", "previous_cursor_value": "2024-05-21T21:25:32.100000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 324, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_notes", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:35.536000Z", "previous_cursor_value": "2026-04-18T00:36:35.536000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2525, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "email_events", "progress_pct": null, "cursor_value": "1709222740385", "previous_cursor_value": "1709222740385", "reason": "Cursor value '1709222740385' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 585, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 16503, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals", "progress_pct": 0.0, "cursor_value": "2026-02-12T08:11:52.508000Z", "previous_cursor_value": "2026-02-12T08:11:52.508000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 12834, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_archived", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "deal_pipelines", "progress_pct": null, "cursor_value": "1680620354263", "previous_cursor_value": "1680620354263", "reason": "Cursor value '1680620354263' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 983, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_calls", "progress_pct": 0.0, "cursor_value": "2006-06-01T00:00:00.000000Z", "previous_cursor_value": "2006-06-01T00:00:00.000000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "engagements_meetings", "progress_pct": 0.0, "cursor_value": "2024-05-15T23:13:13.885000Z", "previous_cursor_value": "2024-05-15T23:13:13.885000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 6595, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "deals_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-13T11:31:00.000000Z", "previous_cursor_value": "2026-04-13T11:31:00.000000Z", "reason": null, "records_emitted": 4, "bytes_emitted": 710, "records_progress": 1.0, "previous_records_emitted": 4}, {"stream_name": "tickets", "progress_pct": 0.0, "cursor_value": "2026-04-18T00:36:37.270000Z", "previous_cursor_value": "2026-04-18T00:36:37.270000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8740, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "campaigns", "progress_pct": null, "cursor_value": "1675121674226", "previous_cursor_value": "1675121674226", "reason": "Cursor value '1675121674226' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 201, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "leads", "progress_pct": 0.0, "cursor_value": "2025-11-11T17:57:19.093000Z", "previous_cursor_value": "2025-11-11T17:57:19.093000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 11179, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "subscription_changes", "progress_pct": null, "cursor_value": "1707094503960", "previous_cursor_value": "1707094503960", "reason": "Cursor value '1707094503960' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 420, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements", "progress_pct": null, "cursor_value": "1776472595536", "previous_cursor_value": "1776472595536", "reason": "Cursor value '1776472595536' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 920, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_emails", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:13:26.539000Z", "previous_cursor_value": "2024-02-05T01:13:26.539000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 13269, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "engagements_tasks", "progress_pct": 0.0, "cursor_value": "2025-07-24T13:57:43.833000Z", "previous_cursor_value": "2025-07-24T13:57:43.833000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8258, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "owners", "progress_pct": 0.0, "cursor_value": "2023-01-31T00:25:34.448000Z", "previous_cursor_value": "2023-01-31T00:25:34.448000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 245, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "contacts_property_history", "progress_pct": 0.0, "cursor_value": "2026-04-18T09:06:43.853000Z", "previous_cursor_value": "2026-04-18T09:06:43.853000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "marketing_emails", "progress_pct": 0.0, "cursor_value": "2023-01-30T23:35:02.584000Z", "previous_cursor_value": "2023-01-30T23:35:02.584000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": null, "previous_records_emitted": 0}, {"stream_name": "ticket_pipelines", "progress_pct": 0.0, "cursor_value": "2024-02-05T01:01:42.937000Z", "previous_cursor_value": "2024-02-05T01:01:42.937000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 1188, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "cars", "progress_pct": 0.0, "cursor_value": "2025-07-21T16:40:32.133000Z", "previous_cursor_value": "2025-07-21T16:40:32.133000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "owners_archived", "progress_pct": 0.0, "cursor_value": "2025-07-07T17:51:18.318000Z", "previous_cursor_value": "2025-07-07T17:51:18.318000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 224, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "form_submissions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": "No cursor value found in state.", "records_emitted": 725, "bytes_emitted": 176986, "records_progress": 0.9797297297297297, "previous_records_emitted": 740}, {"stream_name": "products", "progress_pct": 0.0, "cursor_value": "2025-09-10T15:31:42.043000Z", "previous_cursor_value": "2025-09-10T15:31:42.043000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2355, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "workflows", "progress_pct": null, "cursor_value": "1739377182245", "previous_cursor_value": "1739377182245", "reason": "Cursor value '1739377182245' is not a recognized datetime format.", "records_emitted": 1, "bytes_emitted": 963, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "forms", "progress_pct": 0.0, "cursor_value": "2024-03-21T07:27:29.488000Z", "previous_cursor_value": "2024-03-21T07:27:29.488000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 2444, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "goals", "progress_pct": 0.0, "cursor_value": "2025-01-01T22:42:16.120000Z", "previous_cursor_value": "2025-01-01T22:42:16.120000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 8090, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "pets", "progress_pct": 0.0, "cursor_value": "2025-07-03T13:18:45.525000Z", "previous_cursor_value": "2025-07-03T13:18:45.525000Z", "reason": null, "records_emitted": 0, "bytes_emitted": 0, "records_progress": 0.0, "previous_records_emitted": 1}, {"stream_name": "line_items", "progress_pct": 0.0, "cursor_value": "2023-04-04T21:28:36.663000Z", "previous_cursor_value": "2023-04-04T21:28:36.663000Z", "reason": null, "records_emitted": 1, "bytes_emitted": 4148, "records_progress": 1.0, "previous_records_emitted": 1}, {"stream_name": "properties", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 2154, "bytes_emitted": 1803688, "records_progress": 1.0, "previous_records_emitted": 2154}, {"stream_name": "email_subscriptions", "progress_pct": null, "cursor_value": null, "previous_cursor_value": null, "reason": null, "records_emitted": 6, "bytes_emitted": 1236, "records_progress": 1.0, "previous_records_emitted": 6}]} From 4aab949ad13203087c78612832c6bddb335c00e7 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 22:51:58 +0000 Subject: [PATCH 26/30] feat: force stream progress to 100% on STREAM_COMPLETE and sync success Stream progress is now driven by two completion signals in addition to the datetime-cursor formula: 1. A per-stream STREAM_STATUS=COMPLETE trace message (already dispatched from tally_records_read via _log_stream_read_end) now forces the stream to 1.0 in stream_progress_pcts. 2. log_success() marks every known stream (from records, latest cursors, committed cursors, and written streams) as completed, so the final Rich display and JSONL snapshot show 100% for every stream once the sync finishes. Completed streams render with a checkmark and 100% in the cursor-progress block, even when the underlying cursor is non-datetime or was never observed (e.g. source-github issues, which emits a nested per-repo state blob). --- airbyte/progress.py | 38 ++++++++++--- tests/unit_tests/test_local_sync_progress.py | 60 ++++++++++++++++++++ 2 files changed, 90 insertions(+), 8 deletions(-) diff --git a/airbyte/progress.py b/airbyte/progress.py index b627a66ba..17664321d 100644 --- a/airbyte/progress.py +++ b/airbyte/progress.py @@ -457,8 +457,11 @@ def _observe_state_message( def stream_progress_pcts(self) -> dict[str, float]: """Per-stream datetime-cursor progress estimates. - Only streams with a datetime-parseable baseline and latest cursor are - included. Values are in the range `[0.0, 1.0]`. + Returns values in `[0.0, 1.0]`. A stream is reported as `1.0` once the + source has emitted a `STREAM_STATUS=COMPLETE` trace (or the sync has + otherwise been finalized via `log_success()`); otherwise the value is + derived from the datetime-cursor formula and only streams with a + datetime-parseable baseline + latest cursor are included. """ now = datetime.datetime.now(datetime.timezone.utc) result: dict[str, float] = {} @@ -471,6 +474,8 @@ def stream_progress_pcts(self) -> dict[str, float]: ) if pct is not None: result[stream_name] = pct + for stream_name in self.stream_read_end_times: + result[stream_name] = 1.0 return result def _build_progress_snapshot(self) -> dict[str, Any]: @@ -776,6 +781,16 @@ def log_success( self.end_time = time.time() + now = time.time() + all_known_streams = ( + set(self.stream_read_counts) + | set(self.stream_latest_cursors) + | set(self.stream_committed_cursors) + | set(self.written_stream_names) + ) + for stream_name in all_known_streams: + self.stream_read_end_times.setdefault(stream_name, now) + self._update_display(force_refresh=True) audit_path = self._get_progress_audit_log_path() if audit_path is not None: @@ -1036,7 +1051,7 @@ def _update_display(self, *, force_refresh: bool = False) -> None: self._append_progress_audit_log() self._last_update_time = time.time() - def _get_status_message(self) -> str: # noqa: PLR0915 # Too many statements + def _get_status_message(self) -> str: # noqa: PLR0914, PLR0915 """Compile and return a status message.""" # Format start time as a friendly string in local timezone: start_time_str = _to_time_str(self.read_start_time) @@ -1083,19 +1098,26 @@ def join_streams_strings(streams_list: list[str]) -> str: + "\n\n" ) - # Cursor progress (from observed source state messages) - if self.stream_latest_cursors: + # Cursor progress (from observed source state messages + completion traces) + progress_pcts = self.stream_progress_pcts + cursor_progress_streams = sorted( + set(self.stream_latest_cursors) | set(self.stream_read_end_times) + ) + if cursor_progress_streams: status_message += "- Cursor progress:\n" - progress_pcts = self.stream_progress_pcts - for stream_name, latest in self.stream_latest_cursors.items(): + for stream_name in cursor_progress_streams: cursor_field = self.stream_cursor_fields.get(stream_name) field_str = f" [`{cursor_field}`]" if cursor_field else "" + latest = self.stream_latest_cursors.get(stream_name) + latest_str = f": `{latest}`" if latest else "" pct = progress_pcts.get(stream_name) pct_str = f" ({pct * 100:.1f}%)" if pct is not None else "" + done_str = " ✓" if stream_name in self.stream_read_end_times else "" committed = self.stream_committed_cursors.get(stream_name) committed_str = f" (committed: `{committed}`)" if committed else "" status_message += ( - f" - `{stream_name}`{field_str}: `{latest}`{pct_str}{committed_str}\n" + f" - `{stream_name}`{field_str}{latest_str}" + f"{pct_str}{done_str}{committed_str}\n" ) status_message += "\n" diff --git a/tests/unit_tests/test_local_sync_progress.py b/tests/unit_tests/test_local_sync_progress.py index 59361c14d..7036c05f0 100644 --- a/tests/unit_tests/test_local_sync_progress.py +++ b/tests/unit_tests/test_local_sync_progress.py @@ -17,11 +17,29 @@ AirbyteStateMessage, AirbyteStateType, AirbyteStreamState, + AirbyteStreamStatus, + AirbyteStreamStatusTraceMessage, + AirbyteTraceMessage, StreamDescriptor, + TraceType, Type, ) +def _stream_complete_msg(stream: str) -> AirbyteMessage: + return AirbyteMessage( + type=Type.TRACE, + trace=AirbyteTraceMessage( + type=TraceType.STREAM_STATUS, + emitted_at=0.0, + stream_status=AirbyteStreamStatusTraceMessage( + stream_descriptor=StreamDescriptor(name=stream), + status=AirbyteStreamStatus.COMPLETE, + ), + ), + ) + + def _state_msg( stream: str, cursor_value: str, cursor_field: str = "updatedAt" ) -> AirbyteMessage: @@ -203,5 +221,47 @@ def test_progress_audit_log_written(tmp_path, monkeypatch) -> None: assert contacts["latest_cursor"] == "2024-06-15T10:30:00Z" +def test_stream_complete_trace_forces_progress_to_100pct() -> None: + tracker = ProgressTracker( + ProgressStyle.NONE, + source=None, + cache=None, + destination=None, + ) + list( + tracker.tally_records_read( + iter([ + _state_msg("contacts", "2024-01-01T00:00:00Z"), + _state_msg("contacts", "2024-06-15T10:30:00Z"), + _stream_complete_msg("contacts"), + ]) + ) + ) + assert "contacts" in tracker.stream_read_end_times + assert tracker.stream_progress_pcts["contacts"] == 1.0 + + +def test_log_success_forces_all_streams_to_100pct() -> None: + tracker = ProgressTracker( + ProgressStyle.NONE, + source=None, + cache=None, + destination=None, + ) + list( + tracker.tally_records_read( + iter([ + _state_msg("contacts", "2024-01-01T00:00:00Z"), + _state_msg("companies", "2024-03-15T00:00:00Z"), + ]) + ) + ) + tracker.log_success() + assert tracker.stream_progress_pcts == { + "contacts": 1.0, + "companies": 1.0, + } + + if __name__ == "__main__": pytest.main([__file__, "-v"]) From b972bc8f469ea16ad8c1dbbf9cc8215fee546c82 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 23:23:27 +0000 Subject: [PATCH 27/30] feat: extract cursor from nested per-partition state (source-github-style) Connectors like source-github nest per-stream state under a partition key (e.g. the repo name): `stream_state[][updated_at]`. The cursor extractor was only checking the top level, so these streams reported no cursor and no mid-sync progress (they only jumped to 100% on the `log_success()` override). Make `_extract_cursor_from_stream_state()` recurse up to 4 levels into nested dicts, preferring well-known cursor field names at any depth before falling back to the first datetime-parseable scalar. Adds two tests covering single-level and multi-level nested state. Verified end-to-end with source-github issues against airbytehq/PyAirbyte: cursor advances from 2024-02-21 -> 2026-04-23 across 48 snapshots, progress climbs 0.9% -> 100% in-sync. --- airbyte/_local_sync_progress.py | 99 ++++++++++++++++---- tests/unit_tests/test_local_sync_progress.py | 41 ++++++++ 2 files changed, 120 insertions(+), 20 deletions(-) diff --git a/airbyte/_local_sync_progress.py b/airbyte/_local_sync_progress.py index 1ba8ca285..3a79e7d9d 100644 --- a/airbyte/_local_sync_progress.py +++ b/airbyte/_local_sync_progress.py @@ -99,38 +99,97 @@ def _normalize_stream_state(stream_state: object) -> dict[str, Any] | None: return None +_MAX_STATE_RECURSION_DEPTH = 4 + + +def _find_known_cursor( + state_dict: dict[str, Any], + depth: int, +) -> tuple[str | None, str | None]: + """Depth-first search for a `_COMMON_CURSOR_FIELDS` key in nested dicts. + + Some connectors (notably `source-github`) nest per-stream state under a + partition key (e.g. the repo name), so the cursor lives at + `stream_state[][updated_at]` rather than `stream_state[updated_at]`. + This helper walks up to `_MAX_STATE_RECURSION_DEPTH` levels, checking + known cursor field names at each level before descending. Non-`dict` and + `None` values are skipped. + """ + for candidate in _COMMON_CURSOR_FIELDS: + if candidate in state_dict: + raw = state_dict[candidate] + if raw is not None and not isinstance(raw, dict): + return candidate, str(raw) + + if depth >= _MAX_STATE_RECURSION_DEPTH: + return None, None + + for raw in state_dict.values(): + nested = _normalize_stream_state(raw) + if not nested: + continue + cursor_field, cursor_value = _find_known_cursor(nested, depth + 1) + if cursor_field is not None: + return cursor_field, cursor_value + + return None, None + + +def _find_datetime_fallback( + state_dict: dict[str, Any], + depth: int, +) -> tuple[str | None, str | None]: + """Depth-first search for the first datetime-parseable scalar value. + + Used only when no well-known cursor field name (`_COMMON_CURSOR_FIELDS`) + is present anywhere in the state tree. Recurses up to + `_MAX_STATE_RECURSION_DEPTH` levels into nested dicts. + """ + for key, raw in state_dict.items(): + if raw is None: + continue + if isinstance(raw, (str, int, float)): + value = str(raw) + if _try_parse_datetime_cursor(value) is not None: + return key, value + + if depth >= _MAX_STATE_RECURSION_DEPTH: + return None, None + + for raw in state_dict.values(): + nested = _normalize_stream_state(raw) + if not nested: + continue + cursor_field, cursor_value = _find_datetime_fallback(nested, depth + 1) + if cursor_field is not None: + return cursor_field, cursor_value + + return None, None + + def _extract_cursor_from_stream_state( stream_state: object, ) -> tuple[str | None, str | None]: """Return `(cursor_field, cursor_value)` from a `stream_state` blob. + Recursively searches nested state dicts so per-partition state (e.g. + `source-github`'s `{"": {"updated_at": "..."}}`) is handled. + The search prefers well-known cursor field names (`updatedAt`, - `created_at`, etc.). If none of those are present, falls back to the - first top-level value that parses as a datetime. Returns - `(None, None)` when no usable cursor can be extracted. + `created_at`, …) at any depth up to `_MAX_STATE_RECURSION_DEPTH`. If + none of those are present anywhere in the tree, falls back to the first + datetime-parseable scalar. Returns `(None, None)` when no usable cursor + can be extracted. """ state_dict = _normalize_stream_state(stream_state) if not state_dict: return None, None - for candidate in _COMMON_CURSOR_FIELDS: - if candidate in state_dict: - raw = state_dict[candidate] - if raw is None: - continue - value = str(raw) - # Always return explicit cursor fields, even non-datetime ones. - return candidate, value + cursor_field, cursor_value = _find_known_cursor(state_dict, depth=0) + if cursor_field is not None: + return cursor_field, cursor_value - # Fallback: look for the first datetime-parseable scalar at the top level. - for key, raw in state_dict.items(): - if raw is None or not isinstance(raw, (str, int, float)): - continue - value = str(raw) - if _try_parse_datetime_cursor(value) is not None: - return key, value - - return None, None + return _find_datetime_fallback(state_dict, depth=0) def extract_cursor_from_state_message( diff --git a/tests/unit_tests/test_local_sync_progress.py b/tests/unit_tests/test_local_sync_progress.py index 7036c05f0..481ef9d01 100644 --- a/tests/unit_tests/test_local_sync_progress.py +++ b/tests/unit_tests/test_local_sync_progress.py @@ -68,6 +68,47 @@ def test_extract_cursor_from_state_message_prefers_known_fields() -> None: assert value == "2024-06-15T10:30:00Z" +def test_extract_cursor_from_nested_partition_state() -> None: + """`source-github`-style per-partition state: `{repo: {updated_at: ...}}`.""" + msg = AirbyteMessage( + type=Type.STATE, + state=AirbyteStateMessage( + type=AirbyteStateType.STREAM, + stream=AirbyteStreamState( + stream_descriptor=StreamDescriptor(name="issues"), + stream_state={ + "airbytehq/airbyte": {"updated_at": "2026-04-23T22:20:47Z"}, + }, + ), + ), + ) + name, field, value = extract_cursor_from_state_message(msg.state) + assert name == "issues" + assert field == "updated_at" + assert value == "2026-04-23T22:20:47Z" + + +def test_extract_cursor_from_deeply_nested_state() -> None: + msg = AirbyteMessage( + type=Type.STATE, + state=AirbyteStateMessage( + type=AirbyteStateType.STREAM, + stream=AirbyteStreamState( + stream_descriptor=StreamDescriptor(name="commits"), + stream_state={ + "airbytehq/airbyte": { + "main": {"created_at": "2026-04-23T22:20:47Z"}, + }, + }, + ), + ), + ) + name, field, value = extract_cursor_from_state_message(msg.state) + assert name == "commits" + assert field == "created_at" + assert value == "2026-04-23T22:20:47Z" + + def test_extract_cursor_falls_back_to_first_datetime_value() -> None: msg = AirbyteMessage( type=Type.STATE, From d73ec477660f5189fd56020d2939b17fec194377 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 23:55:48 +0000 Subject: [PATCH 28/30] feat(progress): consolidate per-stream status into a single line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the two separate 'Received records' and 'Cursor progress' blocks with a single 'Streams (N)' bullet list where each stream has one line containing: - Completion marker (`✓`) when the stream has ended - Record count - `Read Progress: X.X% (`baseline->latest`)` when datetime cursor is available, `Read Progress: 100.0% ✓` on completion without cursor, or `Progress: n/a` when no cursor has been observed - `Write Progress: X.X% (`baseline->committed`)` when the destination has acknowledged a datetime cursor Example: - Streams (1): - `issues`: ✓ 899 records | Read Progress: 100.0% (`...->...`) Adds `stream_write_progress_pcts` property (mirrors `stream_progress_pcts` but uses committed cursors) and surfaces `write_progress_pct` in JSONL audit snapshots. --- airbyte/progress.py | 99 ++++++++++++++++++++++++++++----------------- 1 file changed, 61 insertions(+), 38 deletions(-) diff --git a/airbyte/progress.py b/airbyte/progress.py index 17664321d..a22c7274b 100644 --- a/airbyte/progress.py +++ b/airbyte/progress.py @@ -478,6 +478,28 @@ def stream_progress_pcts(self) -> dict[str, float]: result[stream_name] = 1.0 return result + @property + def stream_write_progress_pcts(self) -> dict[str, float]: + """Per-stream datetime-cursor write-progress estimates. + + Uses the same formula as `stream_progress_pcts` but with the + destination-acknowledged (committed) cursor instead of the latest + source-emitted cursor. Only populated for streams with a + datetime-parseable baseline + committed cursor. + """ + now = datetime.datetime.now(datetime.timezone.utc) + result: dict[str, float] = {} + for stream_name, committed in self.stream_committed_cursors.items(): + baseline = self.stream_baseline_cursors.get(stream_name) + pct = compute_stream_progress_pct( + baseline_cursor=baseline, + latest_cursor=committed, + now=now, + ) + if pct is not None: + result[stream_name] = pct + return result + def _build_progress_snapshot(self) -> dict[str, Any]: """Build a point-in-time progress snapshot for JSONL audit logging. @@ -486,6 +508,7 @@ def _build_progress_snapshot(self) -> dict[str, Any]: """ now_dt = datetime.datetime.now(datetime.timezone.utc) progress_pcts = self.stream_progress_pcts + write_progress_pcts = self.stream_write_progress_pcts stream_names = ( set(self.stream_read_counts) | set(self.written_stream_names) @@ -503,6 +526,7 @@ def _build_progress_snapshot(self) -> dict[str, Any]: "latest_cursor": self.stream_latest_cursors.get(stream_name), "committed_cursor": self.stream_committed_cursors.get(stream_name), "progress_pct": progress_pcts.get(stream_name), + "write_progress_pct": write_progress_pcts.get(stream_name), } for stream_name in sorted(stream_names) ] @@ -1051,7 +1075,7 @@ def _update_display(self, *, force_refresh: bool = False) -> None: self._append_progress_audit_log() self._last_update_time = time.time() - def _get_status_message(self) -> str: # noqa: PLR0914, PLR0915 + def _get_status_message(self) -> str: # noqa: PLR0912, PLR0914, PLR0915 """Compile and return a status message.""" # Format start time as a friendly string in local timezone: start_time_str = _to_time_str(self.read_start_time) @@ -1080,46 +1104,45 @@ def join_streams_strings(streams_list: list[str]) -> str: f"({records_per_second:,.1f} records/s{mb_per_second_str}).\n\n" ) - if self.stream_read_counts: - status_message += ( - f"- Received records for {len(self.stream_read_counts)}" - + ( - f" out of {self.num_streams_expected} expected" - if self.num_streams_expected - else "" - ) - + " streams:\n - " - + join_streams_strings( - [ - f"{self.stream_read_counts[stream_name]:,} {stream_name}" - for stream_name in self.stream_read_counts - ] - ) - + "\n\n" - ) - - # Cursor progress (from observed source state messages + completion traces) - progress_pcts = self.stream_progress_pcts - cursor_progress_streams = sorted( - set(self.stream_latest_cursors) | set(self.stream_read_end_times) + # Consolidated per-stream status: records + read/write progress per line. + read_progress_pcts = self.stream_progress_pcts + write_progress_pcts = self.stream_write_progress_pcts + per_stream_names = sorted( + set(self.stream_read_counts) + | set(self.stream_latest_cursors) + | set(self.stream_read_end_times) + | set(self.stream_committed_cursors) ) - if cursor_progress_streams: - status_message += "- Cursor progress:\n" - for stream_name in cursor_progress_streams: - cursor_field = self.stream_cursor_fields.get(stream_name) - field_str = f" [`{cursor_field}`]" if cursor_field else "" + if per_stream_names: + header = ( + f"- Streams ({len(self.stream_read_counts)}" + + (f" of {self.num_streams_expected} expected" if self.num_streams_expected else "") + + "):\n" + ) + lines: list[str] = [] + for stream_name in per_stream_names: + done_marker = "✓ " if stream_name in self.stream_read_end_times else "" + records = self.stream_read_counts.get(stream_name, 0) + baseline = self.stream_baseline_cursors.get(stream_name) latest = self.stream_latest_cursors.get(stream_name) - latest_str = f": `{latest}`" if latest else "" - pct = progress_pcts.get(stream_name) - pct_str = f" ({pct * 100:.1f}%)" if pct is not None else "" - done_str = " ✓" if stream_name in self.stream_read_end_times else "" committed = self.stream_committed_cursors.get(stream_name) - committed_str = f" (committed: `{committed}`)" if committed else "" - status_message += ( - f" - `{stream_name}`{field_str}{latest_str}" - f"{pct_str}{done_str}{committed_str}\n" - ) - status_message += "\n" + read_pct = read_progress_pcts.get(stream_name) + write_pct = write_progress_pcts.get(stream_name) + + if read_pct is not None and baseline and latest: + read_frag = f"Read Progress: {read_pct * 100:.1f}%" f" (`{baseline}->{latest}`)" + elif stream_name in self.stream_read_end_times: + read_frag = "Read Progress: 100.0% ✓" + else: + read_frag = "Progress: n/a" + + segments = [f"{records:,} records", read_frag] + if write_pct is not None and baseline and committed: + segments.append( + f"Write Progress: {write_pct * 100:.1f}%" f" (`{baseline}->{committed}`)" + ) + lines.append(f" - `{stream_name}`: {done_marker}" + " | ".join(segments)) + status_message += header + "\n".join(lines) + "\n\n" # Source cache writes if self.total_records_written > 0: From 415b8f8d1beba29ad29599456c0bd2df46e53afd Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 23:07:47 +0000 Subject: [PATCH 29/30] fix(cloud): isolate JSONL log write in a module-level helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor: extract the progress-log JSONL writer from the polling loop into a module-level `_append_progress_log_entry` helper. The polling loop scope references `self.workspace.client_secret` and `self.workspace.bearer_token` when calling config-api helpers; CodeQL's `py/clear-text-storage-sensitive-data` query name-taints those attributes and, because the file write sits in the same function, flags the write as storing a secret in clear text. The log entry is in fact made up only of stream names, cursor positions, record/byte counters, and timestamps — no credentials flow into it — so moving the write to a separate function where no credential-named variables are in scope eliminates the false-positive source→sink flow without changing runtime behaviour. --- airbyte/cloud/sync_results.py | 107 +++++++++++++++++++++------------- 1 file changed, 67 insertions(+), 40 deletions(-) diff --git a/airbyte/cloud/sync_results.py b/airbyte/cloud/sync_results.py index a06d2e4f3..ae2230a4a 100644 --- a/airbyte/cloud/sync_results.py +++ b/airbyte/cloud/sync_results.py @@ -221,6 +221,63 @@ def _extract_stream_stats(debug_info: dict[str, Any]) -> dict[str, dict[str, int return result +def _append_progress_log_entry( + log_path: Path, + elapsed_secs: float, + job_status: str, + records_synced: int, + bytes_synced: int, + stream_progress: list[dict[str, Any]], + current_stream_stats: dict[str, dict[str, int]], + previous_stream_stats: dict[str, dict[str, int]], +) -> None: + """Append a single JSONL entry describing per-stream sync progress. + + Factored into a module-level helper so the write happens in a scope + that does not reference any credential attributes (`client_secret`, + `bearer_token`). The values passed in are all non-sensitive progress + metrics: stream names, cursor positions, record counts, and timestamps. + """ + log_streams: list[dict[str, Any]] = [] + progress_names: dict[str, dict[str, Any]] = { + str(e.get("stream_name", "")): e for e in stream_progress + } + all_names: list[str] = list(progress_names.keys()) + all_names.extend(name for name in current_stream_stats if name not in progress_names) + + for name in all_names: + entry = progress_names.get(name, {"stream_name": name}) + stats = current_stream_stats.get(name, {}) + prev_stats = previous_stream_stats.get(name, {}) + prev_recs = prev_stats.get("records_emitted", 0) + recs = stats.get("records_emitted", 0) + records_progress = min(recs / prev_recs, 1.0) if prev_recs > 0 else None + log_streams.append( + { + "stream_name": entry.get("stream_name", name), + "progress_pct": entry.get("progress_pct"), + "cursor_value": entry.get("cursor_value"), + "previous_cursor_value": entry.get("previous_cursor_value"), + "reason": entry.get("reason"), + "records_emitted": recs, + "bytes_emitted": stats.get("bytes_emitted", 0), + "records_progress": records_progress, + "previous_records_emitted": prev_recs, + } + ) + + log_entry = { + "timestamp": datetime.now(timezone.utc).isoformat(), + "elapsed_secs": round(elapsed_secs, 1), + "job_status": job_status, + "records_synced": records_synced, + "bytes_synced": bytes_synced, + "streams": log_streams, + } + with log_path.open("a") as f: + f.write(json.dumps(log_entry) + "\n") + + def _build_rich_table( # noqa: PLR0913, PLR0914, PLR0915, PLR0917 stream_progress: list[dict[str, Any]], job_status: str, @@ -734,7 +791,7 @@ def _poll_until_complete( time.sleep(poll_interval) - def _poll_until_complete_with_rich( # noqa: PLR0912, PLR0914, PLR0915 + def _poll_until_complete_with_rich( # noqa: PLR0912, PLR0914 self, *, live: RichLive, @@ -861,47 +918,17 @@ def _poll_until_complete_with_rich( # noqa: PLR0912, PLR0914, PLR0915 # Write JSONL progress log entry when a log path is configured. if progress_log_path is not None: - log_streams: list[dict[str, Any]] = [] - progress_names: dict[str, dict[str, Any]] = { - str(e.get("stream_name", "")): e for e in stream_progress - } - all_names: list[str] = list(progress_names.keys()) - all_names.extend( - name for name in current_stream_stats if name not in progress_names + _append_progress_log_entry( + log_path=progress_log_path, + elapsed_secs=elapsed, + job_status=str(latest_status), + records_synced=(job_info.rows_synced or 0) if job_info else 0, + bytes_synced=(job_info.bytes_synced or 0) if job_info else 0, + stream_progress=stream_progress, + current_stream_stats=current_stream_stats, + previous_stream_stats=previous_stream_stats, ) - for name in all_names: - entry = progress_names.get(name, {"stream_name": name}) - stats = current_stream_stats.get(name, {}) - prev_stats = previous_stream_stats.get(name, {}) - prev_recs = prev_stats.get("records_emitted", 0) - recs = stats.get("records_emitted", 0) - records_progress = min(recs / prev_recs, 1.0) if prev_recs > 0 else None - log_streams.append( - { - "stream_name": entry.get("stream_name", name), - "progress_pct": entry.get("progress_pct"), - "cursor_value": entry.get("cursor_value"), - "previous_cursor_value": entry.get("previous_cursor_value"), - "reason": entry.get("reason"), - "records_emitted": recs, - "bytes_emitted": stats.get("bytes_emitted", 0), - "records_progress": records_progress, - "previous_records_emitted": prev_recs, - } - ) - - log_entry = { - "timestamp": datetime.now(timezone.utc).isoformat(), - "elapsed_secs": round(elapsed, 1), - "job_status": str(latest_status), - "records_synced": (job_info.rows_synced or 0) if job_info else 0, - "bytes_synced": (job_info.bytes_synced or 0) if job_info else 0, - "streams": log_streams, - } - with progress_log_path.open("a") as f: - f.write(json.dumps(log_entry) + "\n") - if latest_status in FINAL_STATUSES: if raise_failure: self.raise_failure_status() From a1098c981594280aa394d228b72ed55c09c121cd Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 01:13:14 +0000 Subject: [PATCH 30/30] feat(progress): render cursor dates as concise yyyy-mm-dd --- airbyte/progress.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/airbyte/progress.py b/airbyte/progress.py index a22c7274b..6777b26c5 100644 --- a/airbyte/progress.py +++ b/airbyte/progress.py @@ -128,6 +128,21 @@ def _to_time_str(timestamp: float) -> str: return datetime_obj.strftime("%H:%M:%S") +def _cursor_date_str(cursor_value: str | None) -> str | None: + """Format a cursor value as a concise `yyyy-mm-dd` date string. + + Returns `None` if `cursor_value` is falsy or cannot be parsed as a + datetime. ISO-8601 timestamps are truncated to their date portion. + """ + if not cursor_value: + return None + try: + parsed = datetime.datetime.fromisoformat(cursor_value.replace("Z", "+00:00")) + except (ValueError, AttributeError): + return None + return parsed.strftime("%Y-%m-%d") + + def _get_elapsed_time_str(seconds: float) -> str: """Return duration as a string. @@ -1129,17 +1144,25 @@ def join_streams_strings(streams_list: list[str]) -> str: read_pct = read_progress_pcts.get(stream_name) write_pct = write_progress_pcts.get(stream_name) - if read_pct is not None and baseline and latest: - read_frag = f"Read Progress: {read_pct * 100:.1f}%" f" (`{baseline}->{latest}`)" + baseline_date = _cursor_date_str(baseline) + latest_date = _cursor_date_str(latest) + committed_date = _cursor_date_str(committed) + + if read_pct is not None and baseline_date and latest_date: + read_frag = ( + f"Read Progress: {read_pct * 100:.1f}% " + f"(dates: `{baseline_date}`-`{latest_date}`)" + ) elif stream_name in self.stream_read_end_times: read_frag = "Read Progress: 100.0% ✓" else: read_frag = "Progress: n/a" segments = [f"{records:,} records", read_frag] - if write_pct is not None and baseline and committed: + if write_pct is not None and baseline_date and committed_date: segments.append( - f"Write Progress: {write_pct * 100:.1f}%" f" (`{baseline}->{committed}`)" + f"Write Progress: {write_pct * 100:.1f}% " + f"(dates: `{baseline_date}`-`{committed_date}`)" ) lines.append(f" - `{stream_name}`: {done_marker}" + " | ".join(segments)) status_message += header + "\n".join(lines) + "\n\n"