Portfolio · 2025–2026

Ruslan Myshchyshyn
Analytics & Data Engineering

End-to-end analytics, BI, and cloud infrastructure — from raw CRM data to production dashboards and automated pipelines for US-based companies.

Looker & Tableau Dashboards

Built a suite of interactive dashboards giving leadership real-time visibility into sales performance, payment collection, call activity, manager productivity, and marketing ROI — all powered by BigQuery as the single source of truth.

Sales & Event Performance Dashboard

Tracks total sales volume, received payments, leftover balances, seat utilization, revenue per seat, and payment status breakdown across three upcoming events (Miami, Los Angeles, New York). Includes daily sales/received trends, monthly comparisons, and package distribution analysis.

Looker BigQuery CRM Data

Financial Inflow Summary

Comprehensive payment tracking dashboard with upcoming payment schedules by event and month, daily payment forecast, client-level outstanding balances with installment plan visibility, received payment log, and overdue payment tracking ($10.7K total overdue).

Looker Payment Schedules BigQuery

Call Activity Report

Real-time call monitoring with geographic distribution by state, weekly/daily activity trends, per-manager performance breakdown (call duration buckets, missed calls, total time), and a detailed activity log with contact names, outcomes, stages, and call durations. Auto-refreshes every 15 minutes.

Looker VoIP/Voximplant BigQuery

Manager Stats & Marketing Analytics

Two dashboards tracking per-manager sales performance (average sale amount, monthly trends, sales count by package type, client list with payment status) and end-to-end marketing funnel (6,641 leads generated at $6.39/lead, 5.16% conversion, ad set performance ranking, daily spend vs. lead generation trends).

Looker Google Ads BigQuery Google Sheets

Bitrix24 → BigQuery Pipeline Suite

Production-grade cloud pipelines extracting CRM, HR, financial, and operational data from Bitrix24 into BigQuery — with type coercion, quarantine tables, incremental sync, and Terraform-managed infrastructure.

CRM Deals Sync

Full & incremental sync of CRM deals with atomic staging-to-production swaps. State tracking prevents partial data overwrites.

crm.deal.list → deals
Call History Sync

Hourly incremental extraction of VoIP call records from Voximplant API. Powers the real-time call activity dashboard.

voximplant.statistic.get → calls
Payment Schedule Sync

Syncs Smart Process payment schedule data, enabling the financial inflow dashboard with upcoming/overdue tracking.

crm.item.list → payment_schedule
CRM Change Tracker

Webhook-driven, append-only change log. Stores entity snapshots and writes field-level diffs — fully idempotent via dedup keys.

webhooks → crm_change_log
Model Measurements

Extracts height, chest, waist, hips from CRM contacts/deals via dynamic field discovery. Normalizes messy input formats.

crm.contact.fields → model_measurements
HR Users Sync

Incremental employee directory sync with ARRAY<INT64> handling for department fields and custom UF_ field support.

user.get → hr_users

BigQuery Views & Analytical Queries

Production SQL views in BigQuery that transform raw CRM extracts into clean, analytics-ready data layers — spanning two projects: an event production CRM (Young Fashion Show) and a cleaning services booking system (Wow Now Cleaning).

Canonical Deal Fact Table

Central view that joins raw deals with 6 dimension tables (users, contacts, CRM statuses, userfield enums, payment schedule) to produce one clean row per deal with resolved names, normalized UTM sources, multi-value language fields, and the first payment date.

BigQuery 6 JOINs UTM Normalization Multi-value Fields

Key Techniques

  • Resolves coded IDs to display names via LEFT JOINs to crm_status, users, contacts, and userfield_enums (3 separate enum lookups for state, location, and service package)
  • Normalizes inconsistent UTM sources (ig/instagram, fb/facebook) and detects ad language from UTM medium patterns
  • Unnests multi-value bracket-encoded fields ([760, 762]) with correlated subquery + STRING_AGG for client language resolution
  • Computes first payment date via subquery aggregation on payment_schedule linked by parentId2 or xmlId
  • All timestamps converted from UTC/Bitrix format to America/New_York using PARSE_TIMESTAMP + timezone cast

Call Analytics

Joins raw VoIP call records with users, contacts, and deal context to produce a fully enriched call activity view — with deduplication, duration bucketing, missed-call detection, and geographic attribution from linked deals.

BigQuery Deduplication QUALIFY + ROW_NUMBER UNION ALL

Key Techniques

  • Deduplicates calls, users, and contacts with QUALIFY ROW_NUMBER() OVER (PARTITION BY ...) to prevent join multiplication from incremental syncs
  • Polymorphic entity resolution: calls link to either CONTACT or DEAL via CRM_ENTITY_TYPE — a UNION ALL CTE maps both entity types to deal attributes (location, state, stage)
  • Handles mixed timestamp formats (ISO string vs Unix micros) with CASE + SAFE_CAST + TIMESTAMP_MICROS
  • Computes call outcome (Missed / No answer / Success), duration buckets (0-2 min, 2-5 min, 5+ min), and threshold flags for conversion analysis

Cleaning Schedule Sync

A 240-line, 10-CTE production view that transforms raw Bitrix24 CRM booking data into a clean, denormalized table powering an automated Google Calendar sync. Parses nested JSON time slots, resolves cleaner IDs to names and emails, handles multiple date formats, and deduplicates across incremental loads — producing one row per (deal, time slot) for a cleaning services company.

BigQuery JSON Parsing CROSS JOIN UNNEST 10 CTEs Calendar Sync

Key Techniques

  • Parses nested JSON arrays (booking_time_json) with three date format fallbacks using chained COALESCE(SAFE.PARSE_TIMESTAMP(...)) — handles YYYY-MM-DD, MM/DD/YYYY, and DD/MM/YYYY
  • Polymorphic cleaner JSON: detects whether assigned_cleaner_json is an array or single object using JSON_TYPE(SAFE.PARSE_JSON(...)), then normalizes to array before unnesting
  • Two-pass name resolution: extracts cleaner IDs from JSON, resolves to full names via hr_users LEFT JOIN — falls back to raw JSON text when HR record is missing
  • Address parsing: extracts from {VALUE}, {ADDRESS}, or plain string JSON, then splits on | delimiter to get the first address component
  • Multi-level deduplication: ROW_NUMBER() for latest booking per deal, GROUP BY for unique time slots, final ANY_VALUE aggregation to collapse join fan-out
  • Smart booking end time: if hours_total is set, computes booking_to = booking_from + hours_total via TIMESTAMP_ADD; otherwise falls back to Bitrix raw end time

Multi-Source Integrations

Additional pipelines and automations connecting QuickBooks, Google Calendar, and Google Sheets to BigQuery — all deployed as Cloud Functions with Terraform.

QuickBooks → BigQuery

Extracts Invoices, Customers, and Purchases with OAuth2 credentials stored in Google Secret Manager. No hardcoded keys.

QuickBooks API → GCS → BigQuery
Google Calendar Sync

Reads a BigQuery booking report view and creates/updates per-cleaner calendar events with deterministic IDs to prevent duplicates.

booking_report → Calendar API
Google Sheets → BigQuery

Automated external table refresh that lets marketing data in Google Sheets be queried live from BigQuery.

Sheets → external table
Infrastructure as Code

All Cloud Functions provisioned with Terraform and shell deploy scripts. Cloud Scheduler, Pub/Sub triggers, repeatable zero-downtime releases.

Terraform + gcloud CLI

Technologies Used

The full technology stack behind the dashboards, pipelines, and integrations.

Python SQL Google BigQuery Google Cloud Functions Cloud Scheduler Pub/Sub GCS Terraform Looker Tableau Bitrix24 REST API QuickBooks API Google Calendar API OAuth2 Google Secret Manager Voximplant