SiteLink Integration: Setup and Sync
Connect SiteLink, the self-storage facility management platform, to DualEntry to pull each location’s daily accounting activity and post it as journal entries in your ledger. DualEntry reads SiteLink’s general journal report through SiteLink’s SOAP reporting API, groups the lines into one balanced journal entry per location per day, and posts them to the company you map each location to. Data flows one way: SiteLink to DualEntry. DualEntry never writes back to SiteLink.
Prerequisites
Confirm the following before connecting:
- SiteLink corporate API credentials: a corporate code, a username, and a password with access to the SiteLink reporting web service. DualEntry supplies the SiteLink API license key, so you do not provide one unless you need to override the default.
- A DualEntry classification whose lines represent your SiteLink locations. Each line name must start with the 3-character SiteLink location code (for example,
301 - Downtown). DualEntry reads the first three characters as the location code.
- A DualEntry company for each location you sync, so location activity posts to the correct entity.
- Your chart of accounts configured in DualEntry. DualEntry discovers the SiteLink accounts that appear in recent activity and asks you to map each one to a GL account.
SiteLink reporting credentials are configured by a DualEntry system administrator, not from the standard integration screen. The administrator sets the corporate code, username, and password (and an optional API license key override) before you complete mapping.
How locations and accounts map
DualEntry models SiteLink locations and accounts as two mapping layers you complete before any journal entry posts. Setup is not complete until every location and every discovered account is mapped.
- Locations come from a classification. Select one DualEntry classification in the integration settings that represents locations in SiteLink. Within the Classifications mapping tab, map each location to a DualEntry company to ensure journal entries are posted to the appropriate company. In the mapping screen the location’s target column is labeled “Company”.
- Accounts come from recent activity. DualEntry pulls SiteLink general journal lines from a backfill window (90 days by default) and collects every distinct account it sees. Each account is identified by its account code plus sub-account name, so
1004 and 1004:Late Fees map separately. You map each discovered account to a DualEntry GL account.
Changing the selected classification after setup clears every location and account mapping for the integration, because the location set is derived from that classification. You must remap before the next sync posts journal entries.
How to connect
The integration authenticates against SiteLink’s SOAP reporting service using your corporate credentials combined with the DualEntry-managed API license key. SiteLink does not offer a sandbox, so you connect against live data.
- Ask your DualEntry system administrator to set the SiteLink credentials on the integration: corporate code, username, and password (plus an API license key only if you are overriding the default).
- In DualEntry, navigate to Settings → Integrations → SiteLink and open the integration settings.
- Select the DualEntry classification whose lines carry your SiteLink location codes. DualEntry creates a location record for each line whose name starts with a 3-digit code.
- Map every location to the DualEntry company that should hold its activity.
- Let DualEntry run the initial backfill to discover accounts, then map every discovered account to a DualEntry GL account.
- Confirm the integration status is Connected. Once all locations and accounts are mapped and the status is Connected, setup is complete and scheduled syncs begin.
What syncs
Each sync run reads SiteLink’s general journal report per mapped location and turns it into DualEntry records. The table below lists what DualEntry pulls and how it lands in your ledger.
| SiteLink data | DualEntry record | Notes |
|---|
| Locations (from the classification) | mapping to a DualEntry company | Codes come from SiteLink and map to a DualEntry classification; each location must map to a company before setup completes. Location classifications also appear at the line level on journal entries. |
| Accounts (from recent journal lines) | mapping to a DualEntry GL account | Discovered from the backfill window. Identified by account code plus sub-account name, so sub-accounts map independently. |
| General journal lines | grouped into journal_entry records | Lines are grouped by date and location into one balanced journal entry per location per day, posted to the mapped company. |
Each general journal line carries a transaction type that SiteLink reports as a numeric code: 1 income, 2 credits, 3 refunds, and 5 NSF (returned payments). DualEntry preserves the line’s debit or credit amount and builds the line memo from the account name and sub-account name. Every journal entry posts in USD with an exchange rate of 1 and is created in posted status.
How sync runs
Once setup is complete, DualEntry syncs SiteLink activity automatically. A few behaviors govern the date window and reliability.
- Account discovery window. Before the first sync, DualEntry looks back 90 days to discover accounts. Adjust the backfill window in integration settings if your recent activity does not surface every account you need to map.
- Journal entry sync window. Each run pulls activity from the configured start date through today. If a global cutoff date is set, DualEntry uses it; otherwise it uses the SiteLink sync start date, falling back to the last 3 days when neither is set.
- 90-day range cap. A single sync cannot span more than 90 days. If the start date is more than 90 days in the past, DualEntry stops with an error rather than pulling an oversized range. Move the cutoff date forward to within 90 days and resync.
- Retries. SiteLink returns a “server busy” signal (
-90) under load. DualEntry retries the call up to three times with a backoff before surfacing the failure, and retries transient network errors with exponential backoff.
Troubleshoot sync errors
When a sync or a journal entry fails, the most common causes are below.
| Symptom | Cause | Resolution |
|---|
| Authentication fails | Wrong corporate code, username, or password, or a missing API license key. | Ask your system administrator to re-enter the SiteLink credentials. SiteLink has no sandbox, so credentials must be valid for the live reporting service. |
| Setup never completes | One or more locations or accounts are unmapped. | Map every location to a company and every discovered account to a GL account. Confirm the integration status is Connected. |
| A location’s entries are missing | The location is not mapped to a company. | Map the location to a DualEntry company; lines for unmapped locations are skipped with an error. |
| A journal entry fails with an unmapped account | A line references an account that has no GL mapping. | Map the account. If it was created after the last backfill, rerun discovery so the new account surfaces. |
| Sync stops with a date-range error | The cutoff or start date is more than 90 days in the past. | Move the cutoff date forward so the range is within 90 days, then resync. |
| Sync fails after retries | SiteLink returned “server busy” (-90) or a network error persisted. | DualEntry already retries three times; resync once SiteLink load clears. Check the SiteLink status page. |
FAQ
Does DualEntry write back to SiteLink?
No. The integration is pull-only. SiteLink remains the system of record for facility operations; DualEntry holds the accounting view derived from SiteLink’s general journal report.
DualEntry reuses your existing DualEntry classification structure so location codes stay aligned with how you already segment activity.
Can I sync more than 90 days of history at once?
No. A single sync is capped at a 90-day range. To load older history, run successive syncs, moving the cutoff date forward each time so each range stays within 90 days.
For maintainers
The details below describe connector configuration and internal endpoints, not user-facing features.
- SOAP endpoint:
https://api.smdservers.net/CCWs_3.5/ReportingWs.asmx (WSDL at the same URL with ?WSDL). The connector calls the GeneralJournalEntries method per location. SUPPORTS_SANDBOX = False.
- API license key: read from the
SITELINK_API_LICENSE_KEY environment variable unless overridden per integration. The reporting username is sent as username:::api_license_key.
- Setting keys (category
sitelink): SITELINK_TARGET_CLASSIFICATION_ID (source classification), SITELINK_BACKFILL_DAYS (account discovery window, default 90), and SITELINK_SYNC_START_DATE (journal entry start date). The global DEFAULT_CUTOFF_DATE setting overrides the start date when present.
- Range cap:
MAX_CUTOFF_DAYS = 90; DEFAULT_SYNC_DAYS = 3 when no start date is set; DEFAULT_BACKFILL_DAYS = 90.
- Retry: server-busy (
-90) and network errors retry up to MAX_RETRIES = 3 with a RETRY_BACKOFF of 15 seconds; request timeout is 120 seconds.
- Credentials endpoints (system administrator only):
POST /api/integrations/sitelink/{integration_id}/credentials/ and GET .../credentials/ (returns corporate code and username only). Description enhancement: PUT /api/integrations/sitelink/{integration_id}/accounts/{record_id}/enhancement/.
Result
After completing these steps, you have a SiteLink integration that discovers your locations and accounts, maps them to DualEntry companies and GL accounts, and posts each location’s daily SiteLink activity as a balanced journal entry. SiteLink stays the system of record for facility operations; DualEntry holds the accounting view. To compare other pull-only integrations, see Cubby Storage and Bill.com. To audit the resulting entries, see Journal Entries. To connect additional systems, return to Integrations.