{
  "slug": "courtreserve",
  "url": "https://apps.sectorgrowth.com/integrations/courtreserve/",
  "name": "CourtReserve",
  "vendor": "CourtReserve",
  "aliases": [
    "Court Reserve",
    "CourtReserve club management",
    "CourtReserve Organization API"
  ],
  "website": "https://courtreserve.com/",
  "category": {
    "slug": "sports-clubs-and-venues",
    "name": "Sports, clubs and venues",
    "url": "https://apps.sectorgrowth.com/categories/sports-clubs-and-venues/"
  },
  "summary": "CourtReserve holds the members, court bookings and programme registrations a racquet club runs on, behind a key rated for sixty calls a minute.",
  "answer": "No. There is no CourtReserve app in the HubSpot App Marketplace as of September 2026, so a club that wants its members in HubSpot is looking at a build. A scheduled service that reads each club and upserts members, reservations, events, memberships and transactions is the route that works. It pays for itself fastest for operators running more than one location.",
  "nativeApp": {
    "status": "none",
    "verifiedAt": "2026-09-22"
  },
  "api": {
    "style": "rest",
    "auth": "basic",
    "webhooks": "unknown",
    "changedSince": "partial",
    "sandbox": "unknown",
    "rateLimit": "60 calls per minute per API key, with a 429 and a Retry-After header above it",
    "docsUrl": "https://api.courtreserve.com/apihelp/index"
  },
  "objects": [
    {
      "source": "Member",
      "hubspot": "contact",
      "direction": "to_hubspot",
      "key": "Organization id plus email, falling back to the member id",
      "notes": "HubSpot enforces one contact per email, so a member at two clubs is one record."
    },
    {
      "source": "Membership",
      "hubspot": "custom",
      "direction": "to_hubspot",
      "key": "Organization id plus membership id",
      "notes": "Tier and fee live here, not on the contact, because a member can change tier."
    },
    {
      "source": "Reservation",
      "hubspot": "custom",
      "direction": "to_hubspot",
      "key": "Organization id plus reservation id",
      "notes": "Cancellations arrive on a separate list and must be read in the same run."
    },
    {
      "source": "Event",
      "hubspot": "custom",
      "direction": "to_hubspot",
      "key": "Organization id plus event id"
    },
    {
      "source": "Event registration",
      "hubspot": "custom",
      "direction": "to_hubspot",
      "key": "Organization id plus registration id, associated to the member and the event"
    },
    {
      "source": "Transaction",
      "hubspot": "deal",
      "direction": "to_hubspot",
      "key": "Organization id plus transaction id",
      "notes": "Transactions are the only object that belongs in a pipeline."
    }
  ],
  "approaches": [
    {
      "kind": "custom",
      "fit": "recommended",
      "why": "Reading six object types across several clubs inside a 60 call per minute budget needs checkpoints, throttling and a conflict handler for shared members, which is a service rather than a configuration."
    },
    {
      "kind": "ipaas",
      "fit": "possible",
      "why": "One club with modest volume can push new members into HubSpot with an automation platform, as long as nobody expects reservations, cancelled bookings or cross club identity to come with them."
    },
    {
      "kind": "native",
      "fit": "avoid",
      "why": "A marketplace search for CourtReserve returns no app published under that name, so there is nothing to install."
    }
  ],
  "effort": {
    "discoveryHours": [
      10,
      20
    ],
    "buildHours": [
      70,
      150
    ],
    "buildBand": "70 to 150 hours",
    "typicalElapsed": "4 to 8 weeks"
  },
  "pattern": "polling-watermark",
  "faqs": [
    {
      "q": "Does CourtReserve have a HubSpot app?",
      "a": "A HubSpot App Marketplace search for CourtReserve turns up four results that merely mention the word, with nothing published under the name. Connecting the two systems is a build, sized by how many locations you run and how much history you want loaded."
    },
    {
      "q": "What does the CourtReserve API let you read?",
      "a": "The vendor documents an organization level API covering memberships, members, families, events, reservations and transactions. Multi location data is described as an Enterprise plan feature. API access itself is limited to the Advance, Momentum and Enterprise plans, so a club on a lower tier has no programmatic route at all."
    },
    {
      "q": "How is the CourtReserve API authenticated and how hard is the rate limit?",
      "a": "Keys are created in the club's settings and presented with basic authentication on each request. The documented limit is 60 calls per minute per API key, and going over it returns a 429 with a Retry-After header. That ceiling, not HubSpot, is what decides how long a nightly run takes."
    },
    {
      "q": "How do you handle a member who belongs to two CourtReserve clubs?",
      "a": "HubSpot allows one contact per email address, so the same person at two clubs is one record. We keep a multi select property listing every club the person belongs to, set the primary club only when the contact is created, and merge the list on every later run rather than overwriting it."
    },
    {
      "q": "How fresh is CourtReserve data once it reaches HubSpot?",
      "a": "One night behind. The sync runs nightly, outside club hours, because 60 calls per minute per key does not leave room for a frequent poll across several locations. A booking made this morning reaches the portal overnight. If a club needs a same day view, that is a smaller, separate job over members alone."
    },
    {
      "q": "How do cancelled bookings and registrations reach HubSpot?",
      "a": "They come from a separate list, read in the same run as the active one. If you read only the active list, a cancellation looks like a record that simply stopped being updated, and the club's occupancy numbers drift upward every week until somebody notices."
    },
    {
      "q": "Does a CourtReserve sync create marketing consent problems?",
      "a": "It can, which is why consent is designed before the first load. The platform records a marketing opt out per member, and we carry that into a property on the contact and into the legal basis field. Marketable status itself cannot be set through the HubSpot API, so a list and a workflow do the last step."
    },
    {
      "q": "How long does a multi club CourtReserve build take?",
      "a": "Six object types across several locations, including the association passes and the backfill scripts, put discovery at ten to twenty hours and the build at seventy to a hundred and fifty. A single club with members and transactions only sits at the bottom of that range."
    }
  ],
  "sections": [
    {
      "depth": 2,
      "text": "Why teams connect CourtReserve to HubSpot",
      "anchor": "#why-teams-connect-courtreserve-to-hubspot",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#why-teams-connect-courtreserve-to-hubspot"
    },
    {
      "depth": 2,
      "text": "What syncs",
      "anchor": "#what-syncs",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#what-syncs"
    },
    {
      "depth": 2,
      "text": "Architecture",
      "anchor": "#architecture",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#architecture"
    },
    {
      "depth": 2,
      "text": "Three ways to connect",
      "anchor": "#three-ways-to-connect",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#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/courtreserve/#what-breaks-and-how-we-prevent-it"
    },
    {
      "depth": 3,
      "text": "Sixty calls a minute per key",
      "anchor": "#sixty-calls-a-minute-per-key",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#sixty-calls-a-minute-per-key"
    },
    {
      "depth": 3,
      "text": "Reads bounded by a date window",
      "anchor": "#reads-bounded-by-a-date-window",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#reads-bounded-by-a-date-window"
    },
    {
      "depth": 3,
      "text": "Members shared between clubs",
      "anchor": "#members-shared-between-clubs",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#members-shared-between-clubs"
    },
    {
      "depth": 3,
      "text": "Cancelled bookings on a separate list",
      "anchor": "#cancelled-bookings-on-a-separate-list",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#cancelled-bookings-on-a-separate-list"
    },
    {
      "depth": 2,
      "text": "Our approach",
      "anchor": "#our-approach",
      "url": "https://apps.sectorgrowth.com/integrations/courtreserve/#our-approach"
    }
  ],
  "caseStudies": [
    "https://apps.sectorgrowth.com/case-studies/courtreserve-hubspot-pickleball-franchise/"
  ],
  "guides": [
    "https://apps.sectorgrowth.com/guides/choose-a-hubspot-integration-approach/"
  ],
  "builtBySectorGrowth": true,
  "status": "published",
  "verifiedAt": "2026-09-22",
  "updatedAt": "2026-09-25",
  "authors": [
    {
      "name": "Prash",
      "role": "Lead of Technical Integrations and AI Solutions"
    }
  ],
  "sources": [
    {
      "title": "Understanding the CourtReserve API",
      "url": "https://help.courtreserve.com/en/articles/12771256-understanding-the-courtreserve-api"
    },
    {
      "title": "Set up API Access Integration | CourtReserve Help Center",
      "url": "https://help.courtreserve.com/en/articles/10414722-set-up-api-access-integration"
    },
    {
      "title": "CourtReserve - Reserve & Play",
      "url": "https://api.courtreserve.com/apihelp/index"
    },
    {
      "title": "Pickleball & Tennis Club Management Software | CourtReserve",
      "url": "https://courtreserve.com/"
    }
  ]
}