Technical Reference
Full technical details on how DropFetch queries Salesforce, file naming conventions, result behaviour, and system architecture.
How It Works
DropFetch runs as an always-on background daemon on an XentricIT-managed GCP VM. It watches each customer's dedicated inbox/ folder and triggers a Salesforce SOQL query the moment a CSV file appears. For every row in the CSV it queries Salesforce, collects matching records, and writes a Results CSV back to your results/ folder.
Map the network drive
Your dedicated folder is shared over SMB (Samba). Mount it once as a Windows or Mac network drive — it appears as a regular drive letter or mount point on your machine.
Prepare your CSV
Name the file after the exact Salesforce API object name (e.g. Account.csv, Contact.csv, CustomObject__c.csv). The first column header is the lookup field (the WHERE clause value); every remaining column header is a Salesforce field to retrieve.
Drop it into inbox/
Copy or save your CSV into the shared drive. DropFetch detects the new file in ~1 second via filesystem events — no polling delays.
Salesforce is queried row by row
For each data row DropFetch runs: SELECT {col2}, {col3}, … FROM {Object} WHERE {col1} = '{value}'. Pagination is handled automatically for multi-record matches.
Results CSV written to results/
Account_Results_{YYYYMMDD_HHMMSS}.csv appears in your results/ folder. One output row per matching Salesforce record. The Result column shows the count of matches, or Data Not Found if nothing was returned.
Input file is routed and logged
On success the input CSV moves to processed/ with a timestamp. On any error it moves to failed/. A per-row audit log is written to your private logs/ folder.
File Naming Convention
The filename tells DropFetch which Salesforce object to query. The CSV column headers define what to look up and what to retrieve.
First column header = lookup field (WHERE clause) · Remaining column headers = fields to fetch (SELECT clause)
CSV layout example
For Account.csv querying by Name and fetching Website, Id, and Phone:
| Name | Website | Id | Phone |
|---|---|---|---|
| Acme Corp | |||
| Globex Inc |
DropFetch fills the blank columns and writes the results to Account_Results_{timestamp}.csv.
Input file examples
| Input filename | Object queried | Lookup field | Fields fetched |
|---|---|---|---|
| Account.csv | Account | Name | Website, Id |
| Contact.csv | Contact | FirstName, LastName, AccountId | |
| Lead.csv | Lead | Company | Status, OwnerId |
| CustomObject__c.csv | CustomObject__c | External_Id__c | Status__c, Description__c |
Output filename: {stem}_Results_{YYYYMMDD_HHMMSS}.csv — written to results/
Result Column Behaviour
Every output row includes a Result column that shows how many Salesforce records matched the lookup value for that row.
| Scenario | Output rows | Result value |
|---|---|---|
| Exactly 1 record found | 1 row | 1 |
| 3 records found | 3 rows (one per record) | 3 on every row |
| No records found | 1 row (fields blank) | Data Not Found |
| Blank lookup value in CSV | 1 row (fields blank) | Data Not Found |
Result = 3. This means your Results CSV may have more rows than your input CSV.
Architecture
DropFetch runs as a systemd service on an XentricIT-managed GCP VM (Ubuntu 22.04). Customer folders are shared over SMB via Samba and mounted as network drives on customer machines. Data flows from the customer's local machine into their private Salesforce org and back — the XentricIT VM acts as a query intermediary only, never a permanent data store.
Customer Isolation
All customers share one XentricIT GCP VM instance. Isolation is enforced at the folder, credential, and network share level — no customer can access another customer's files, credentials, or results.
config.yaml file accessible only to that customer's process.
smb://vm-ip/customer-name — with no visibility into other shares.
inbox/, results/, processed/, failed/, and logs/ directories with filesystem-level access controls.
results/ folder. No cross-customer data exposure.
Tech Stack
- Python 3.11 — core daemon, filesystem event handling, CSV parsing and result writing
- simple-salesforce — Salesforce REST API client (
query_allwith pagination support) - Samba (SMB) — cross-platform network drive sharing (Windows & Mac compatible)
- systemd — service management, auto-restart on failure, boot persistence
- Google Cloud VM — Ubuntu 22.04 e2 instance managed by XentricIT