Skip to main content

Implementation Overview

Implementation Type: Hybrid (Tracker + Workable via Kombo)
Note Format: Plain Text
Status: Production Ready
Customer-Specific Implementation
This client is hardcoded for MW Resources and should not be used for other organizations without modification.

Configuration

Architecture

This is a specialized hybrid client that combines two data sources:
  1. Tracker ATS - Primary system for all operations
  2. Workable (via Kombo) - Application data only

Data Flow

Inheritance

Feature Summary

Streaming Operations (Hybrid)

Stream Jobs

Status: Supported (Tracker)
Inherits job streaming from TrackerAtsClient.

Stream Applications

Status: Supported (Hybrid - Custom Override)
Method: _stream_applications(updated_after, for_job_ids)
Custom Implementation:
Overrides the base Tracker implementation to:
  1. Fetch applications from Workable via Kombo
  2. Fetch applications from Tracker
  3. For Workable applications:
    • Find or create corresponding candidate in Tracker
    • Create application record in Tracker if needed
    • Map Workable data to Tracker structure
  4. Return combined application set

Stream Candidates

Status: Supported (Tracker)
Inherits candidate streaming from TrackerAtsClient.
All application management operations use Tracker functionality:
  • Move to Stage (Supported via Tracker)
  • Get Rejection Reasons (Not Supported - Tracker limitation)
  • Reject Applications (Limited via Tracker)
  • Create Applications (Supported via Tracker)
  • Get All Stages (Not Supported - Tracker limitation)
All job operations use Tracker:
  • Get Job by ID (Supported)
  • Get Enhanced Job (Supported)
  • Batch Job Operations (Supported)

Get Candidate by ID

Status: Supported (Tracker)

Find Candidates by Details

Status: Supported (Tracker)Implementation Notes:
Custom method _ensure_candidate_exists_in_tracker() searches Tracker for candidates and creates them if needed when processing Workable applications.

Get Resume

Status: Supported (Tracker)
All notes and attachments operations use Tracker:
  • Application Notes (Supported)
  • Candidate Notes (Supported)
  • Application Attachments (Supported)
  • Candidate Attachments (Supported)
All custom field operations use Tracker’s implementation.

Implementation Notes

Workable Integration

Uses TrackerWorkableWrapperKomboClient - a specialized Kombo client for accessing Workable data.

Candidate Mapping

When encountering a Workable application:
  1. Extract candidate info (name, email, phone)
  2. Search for candidate in Tracker by details
  3. If not found, create candidate in Tracker
  4. Link application to Tracker candidate

Phone Number Normalization

Uses normalize_phone_for_comparison() to match candidates across systems despite formatting differences.

Application Status Mapping

Maps Workable application outcomes to Tracker:
  • HIRED → Accepted
  • REJECTED → Declined
  • Other outcomes → Appropriate Tracker statuses

Hybrid Streaming Logic

The _stream_applications() override:

Known Limitations

MW Resources Specific
This implementation is hardcoded for MW Resources’ specific workflow. Do not use for other organizations.
Tracker Limitations Apply
Inherits all limitations from TrackerAtsClient:
  • No rejection reason enumeration
  • No stage enumeration
  • Timezone handling quirks
Workable Data is Read-Only
Applications from Workable are synced to Tracker. All write operations go to Tracker, not back to Workable.

Use Case

This hybrid client enables MW Resources to:
  • Receive applications from Workable (where candidates apply)
  • Store and manage all data in Tracker (system of record)
  • Use Tenzo with their existing dual-system workflow
  • Implementation: server/ats/tracker_ats/mw_resources_workable_tracker_wrapper_client.py (~400 lines)
  • Kombo Client: server/ats/tracker_ats/tracker_workable_wrapper_kombo_client.py
  • Documentation: server/ats/tracker_ats/MW_RESOURCES_WORKABLE_TRACKER_IMPLEMENTATION.md
  • Base Client: server/ats/tracker_ats/tracker_ats_client.py
  • Parent Base: server/ats/base_ats_client.py

See Also