{
  "slug": "servicechannel",
  "url": "https://apps.sectorgrowth.com/integrations/servicechannel/",
  "name": "ServiceChannel",
  "vendor": "ServiceChannel",
  "aliases": [
    "Service Channel",
    "ServiceChannel Provider Automation",
    "SC work orders",
    "ServiceChannel API"
  ],
  "website": "https://servicechannel.com/",
  "category": {
    "slug": "field-service-and-facilities",
    "name": "Field service and facilities",
    "url": "https://apps.sectorgrowth.com/categories/field-service-and-facilities/"
  },
  "summary": "ServiceChannel holds the work order your customer raised and the invoice that closes it, which is why the contractor never owns the record.",
  "answer": "No. The HubSpot App Marketplace holds no ServiceChannel app as of September 2026, only fuzzy matches on the word. Because the work order is raised on the customer's platform rather than yours, the honest route is a service that subscribes to ServiceChannel webhooks and keys every record on the work order id. A contractor holding more than one provider account needs that service to be tenant aware from the first line of code.",
  "nativeApp": {
    "status": "none",
    "verifiedAt": "2026-09-22"
  },
  "api": {
    "style": "rest",
    "auth": "oauth2",
    "webhooks": "yes",
    "changedSince": "unknown",
    "sandbox": "yes",
    "rateLimit": "300 requests a minute per client id and 600 a minute per subscriber or provider in production, and 40 and 80 in the sandbox",
    "docsUrl": "https://developer.servicechannel.com/basics/"
  },
  "objects": [
    {
      "source": "Work order",
      "hubspot": "deal",
      "direction": "two_way",
      "key": "ServiceChannel work order id in a custom HubSpot property",
      "notes": "The customer creates it, so the id exists before your service sees it."
    },
    {
      "source": "Location",
      "hubspot": "custom",
      "direction": "to_hubspot",
      "key": "Location id, associated to the subscriber",
      "notes": "A site object, because one national customer carries thousands of stores."
    },
    {
      "source": "Subscriber",
      "hubspot": "company",
      "direction": "to_hubspot",
      "key": "Subscriber id",
      "notes": "The customer whose platform issues the work."
    },
    {
      "source": "Provider",
      "hubspot": "company",
      "direction": "to_hubspot",
      "key": "Provider id, with a record type property separating it from a subscriber"
    },
    {
      "source": "Proposal",
      "hubspot": "custom",
      "direction": "two_way",
      "key": "Proposal id, associated to the work order"
    },
    {
      "source": "Invoice",
      "hubspot": "custom",
      "direction": "to_source",
      "key": "Work order id plus invoice number",
      "notes": "One invoice per work order, at or under the not-to-exceed amount."
    },
    {
      "source": "Check-in and check-out",
      "hubspot": "engagement",
      "direction": "to_hubspot",
      "key": "Work order id plus the technician timestamp"
    }
  ],
  "approaches": [
    {
      "kind": "custom",
      "fit": "recommended",
      "why": "Events, a queue and a link store are the only shape that keeps a work order, its proposal and its invoice consistent across two tenants while respecting a rate limit counted per client id."
    },
    {
      "kind": "ipaas",
      "fit": "possible",
      "why": "A per-task platform can move a new work order into HubSpot and will do that well. It has nowhere to hold tenant scope, nowhere to enforce the not-to-exceed rule and no replay when an event is missed."
    },
    {
      "kind": "native",
      "fit": "avoid",
      "why": "Nothing to install. The marketplace returns only fuzzy matches, so there is no listed ServiceChannel app to weigh against a build."
    }
  ],
  "effort": {
    "discoveryHours": [
      10,
      20
    ],
    "buildHours": [
      70,
      150
    ],
    "buildBand": "70 to 150 hours",
    "typicalElapsed": "4 to 8 weeks"
  },
  "pattern": "webhook-queue",
  "faqs": [
    {
      "q": "Is there a ServiceChannel app in the HubSpot App Marketplace?",
      "a": "No. The marketplace returns only fuzzy matches, apps whose descriptions happen to mention the words rather than apps built for ServiceChannel. Every route into HubSpot is therefore a service you commission or a per-task automation platform you configure, and both leave the work order on the customer's platform."
    },
    {
      "q": "How does a ServiceChannel webhook prove it came from ServiceChannel?",
      "a": "Each callback carries a Sign-Data header holding a base-64 encoded string. You recompute it as an HMAC over the payload using the SHA256 algorithm and your signing key, which the API returns from its signing key endpoint and which stays the same until you regenerate it. Compare the two before you trust a single field."
    },
    {
      "q": "How long does a ServiceChannel endpoint have to respond?",
      "a": "Five seconds, and the response has to be a 2xx. Miss it and ServiceChannel retries the event three times at five minute intervals, then deletes the event data. A thousand consecutive failures disables the webhook for twelve hours, and it stays disabled after that until someone reviews the endpoint and turns it back on."
    },
    {
      "q": "How many ServiceChannel webhooks can one integration register?",
      "a": "Up to twenty webhooks, each holding up to twenty subscriptions, so four hundred subscriptions in total. Creating them needs an account with the Super Admin secondary role on the subscriber side, or Provider Automation Admin access on the provider side, which is worth arranging in week one rather than week four."
    },
    {
      "q": "What are the ServiceChannel API rate limits?",
      "a": "Production allows 300 requests a minute for an application, counted per client id, and 600 a minute for a company, counted per subscriber or provider id. The sandbox allows 40 and 80. Exceeding either returns a 429 with a Retry-After header in HTTP date format telling you when the window ends."
    },
    {
      "q": "Can one app serve two ServiceChannel provider accounts?",
      "a": "The token scopes to the account of the user who authenticates, so one registered application with a user per tenant covers reads across both. Whether webhook subscriptions scope the same way is something to verify against your own tenants before you design around it, because the answer changes the number of registered apps you need."
    },
    {
      "q": "Why does a record created in ServiceChannel sometimes read back as missing?",
      "a": "Because reads come from replica servers while writes go to the primary, and replication can take up to thirty seconds depending on load. A create followed immediately by a read can return a 404. Treat the write acknowledgement as the truth, and confirm by reading later rather than retrying the create."
    },
    {
      "q": "What does a ServiceChannel to HubSpot build take in hours?",
      "a": "Work orders, locations, proposals and invoices across two tenants, with signature verification, a queue, watermarks and a replay endpoint, come to ten to twenty hours of discovery and seventy to a hundred and fifty hours of build. Confirming which events your tenants actually emit is the discovery task that moves the estimate."
    }
  ],
  "sections": [
    {
      "depth": 2,
      "text": "Why teams connect ServiceChannel to HubSpot",
      "anchor": "#why-teams-connect-servicechannel-to-hubspot",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#why-teams-connect-servicechannel-to-hubspot"
    },
    {
      "depth": 2,
      "text": "What syncs",
      "anchor": "#what-syncs",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#what-syncs"
    },
    {
      "depth": 2,
      "text": "Architecture",
      "anchor": "#architecture",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#architecture"
    },
    {
      "depth": 2,
      "text": "Three ways to connect",
      "anchor": "#three-ways-to-connect",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#three-ways-to-connect"
    },
    {
      "depth": 2,
      "text": "What breaks and how we prevent it",
      "anchor": "#what-breaks-and-how-we-prevent-it",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#what-breaks-and-how-we-prevent-it"
    },
    {
      "depth": 3,
      "text": "Events missed after three retries",
      "anchor": "#events-missed-after-three-retries",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#events-missed-after-three-retries"
    },
    {
      "depth": 3,
      "text": "Replica lag after a write",
      "anchor": "#replica-lag-after-a-write",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#replica-lag-after-a-write"
    },
    {
      "depth": 3,
      "text": "Ten minute access tokens",
      "anchor": "#ten-minute-access-tokens",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#ten-minute-access-tokens"
    },
    {
      "depth": 3,
      "text": "Limits per client id and company",
      "anchor": "#limits-per-client-id-and-company",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#limits-per-client-id-and-company"
    },
    {
      "depth": 2,
      "text": "Our approach",
      "anchor": "#our-approach",
      "url": "https://apps.sectorgrowth.com/integrations/servicechannel/#our-approach"
    }
  ],
  "caseStudies": [],
  "guides": [
    "https://apps.sectorgrowth.com/guides/choose-a-hubspot-integration-approach/"
  ],
  "builtBySectorGrowth": false,
  "status": "published",
  "verifiedAt": "2026-09-22",
  "updatedAt": "2026-09-25",
  "authors": [
    {
      "name": "Prash",
      "role": "Lead of Technical Integrations and AI Solutions"
    }
  ],
  "sources": [
    {
      "title": "Authentication and Authorization - ServiceChannel",
      "url": "https://developer.servicechannel.com/basics/general/authentication/"
    },
    {
      "title": "Throttling - ServiceChannel",
      "url": "https://developer.servicechannel.com/basics/general/throttling/"
    },
    {
      "title": "Environments - ServiceChannel",
      "url": "https://developer.servicechannel.com/basics/general/environments/"
    },
    {
      "title": "About Webhooks - ServiceChannel",
      "url": "https://developer.servicechannel.com/guides/wh/about-webhooks/"
    },
    {
      "title": "Receive Events and Respond - ServiceChannel",
      "url": "https://developer.servicechannel.com/guides/wh/receive-events-and-respond/"
    },
    {
      "title": "Guides - ServiceChannel",
      "url": "https://developer.servicechannel.com/guides/"
    }
  ]
}