Microsoft ships more than 1,000 prebuilt connectors with Power Platform. And yet, in almost every enterprise environment we walk into, someone is asking the same question: should we build a custom connector for this? The instinct is understandable. The prebuilt library is broad but not infinite, and the moment a team hits an internal API, a niche SaaS product, or a legacy system, the custom connector portal starts to look like the obvious answer.
It usually is not. Custom connectors are cheap to build and expensive to own. The build takes an afternoon; the maintenance takes years. Most conversations that begin with we need a custom connector should end with a different answer, and the ones that don't should be governed like the durable platform assets they are about to become.
This is a decision-support guide for the people who own that call: enterprise architects, platform leads, and the executive sponsors who will inherit the total cost of ownership. It covers three questions in order. Should you build one at all? If yes, how should it authenticate? And how do you operate it across environments without turning next year's roadmap into a rework program?
TL;DR
Power Platform custom connectors are wrappers around REST APIs that make an external system feel native to Power Automate, Power Apps, and Copilot Studio. They are the right answer less often than teams assume, and when they are the right answer, authentication and lifecycle discipline determine whether they become platform assets or 18-month liabilities.
Key Takeaways
- Custom connector should be a last resort, not a first instinct. HTTP with Microsoft Entra ID, an Azure Function wrapper, or waiting for a certified connector is often the better call.
- Reuse breadth is the single most important build-vs-buy criterion. If fewer than a handful of flows will consume the API, you probably do not need a connector.
- Microsoft Entra ID is the default authentication choice for Microsoft-hosted APIs. Since February 17, 2024, every OAuth 2.0 custom connector requires a per-connector redirect URI in its Entra ID app registration.
- Solution-aware from day one. Custom connectors that are not part of a solution cannot use connection references, cannot promote cleanly across environments, and become the reason your ALM pipeline breaks.
- Classic DLP is still the control plane for custom connectors. Advanced Connector Policies went generally available in June 2026 but do not yet cover custom connectors. Design host URLs and naming today for the default-deny model coming tomorrow.
The Build-vs-Buy Decision Framework for Power Platform Custom Connectors
Before you decide how to build a custom connector, decide whether you should. There is a spectrum of integration options between use a prebuilt connector and build a custom one, and most teams skip past it. The framework below is the one we use in the field.
The five options, in order of preference
- Certified prebuilt connector. Free, governed by ACP-eligible policies, patched by the vendor. Always the first choice when it exists.
- HTTP action with Microsoft Entra ID. For internal Microsoft-hosted APIs used by one or two flows, an HTTP action authenticated with Entra ID is faster, cheaper, and does not create a connector to maintain.
- Logic Apps or Azure Function wrapper. When the API needs shaping, orchestration, or resilience logic, a small Azure Function or Logic App gives you a stable contract without turning every code change into a Power Platform release.
- Custom connector. The right answer when a stable API will be reused broadly across makers, needs to appear natively in Power Automate and Copilot Studio, and benefits from centralized DLP classification.
- Wait. If a certified connector is on Microsoft's public roadmap within six months, waiting is often cheaper than building.
The build criteria that actually matter
The prompts below decide whether the custom connector path clears its own bar. From real builds, the pattern is consistent: connectors succeed when reuse is broad, the upstream API is stable, and someone owns it. They fail when any of those three conditions is missing.
Custom connector build-vs-buy scorecard
Reuse breadth
- Build signal: Ten or more flows or apps across multiple makers will consume the API within twelve months.
- Do-not-build signal: One or two flows in a single business unit. Use HTTP.
Upstream API stability
- Build signal: Versioned, documented, contractually stable API from a mature vendor or internal platform team.
- Do-not-build signal: Pre-release API, undocumented internal endpoint, or a vendor known for breaking changes.
Authentication complexity
- Build signal: Standard OAuth 2.0 authorization code or Entra ID. Fits the platform's native patterns.
- Do-not-build signal: Custom signing schemes, mTLS, or per-request HMAC. Wrap in Azure Function first.
Governance posture
- Build signal: API touches business data and needs DLP classification, connector-level auditing, and RBAC.
- Do-not-build signal: Low-sensitivity read-only lookup that HTTP with an environment variable can safely serve.
Ownership
- Build signal: A named team owns the connector's lifecycle, versioning, and incident response for at least two years.
- Do-not-build signal: No named owner. Build stops here.
The last row is the one that stops most builds in our reviews. A custom connector without an owner is a future incident with a countdown clock.
Authentication Patterns: Choices, Not Options
Microsoft's documentation presents authentication as a menu: OAuth 2.0, API Key, Basic, Microsoft Entra ID. In practice they are decisions with operational consequences that surface months after the connector ships. Choose deliberately.
Microsoft Entra ID: the default
For any Microsoft-hosted API, Entra ID is the recommended choice, and it is the recommendation for a reason. It inherits conditional access, tenant policies, and audit logging without you writing a line of it. Choose Entra ID when the API is your own or another Microsoft-hosted service. Refer to the Microsoft Learn custom connectors overview for the full authentication matrix.
OAuth 2.0 authorization code: for third-party SaaS with user context
Use the authorization code flow when the connector must act as the signed-in user against a third-party SaaS platform. Two operational notes that trip up real builds. First, only the authorization code flow issues refresh tokens; client credentials does not, so long-running unattended flows built on client credentials will die at token expiry unless the connector re-authenticates. Second, since February 17, 2024, Microsoft enforces a per-connector redirect URI in the Entra ID app registration. Every new OAuth 2.0 custom connector must have its own redirect URI registered, and older connectors sharing the generic Power Platform redirect need to be migrated. See Microsoft's OAuth verification guidance for the exact steps.
API Key: simple, and simply risky
API keys are fine for low-trust internal APIs where key rotation is cheap and blast radius is small. They are the wrong choice for anything holding customer or financial data, because a leaked key is authorization without accountability. If you must use one, store it in an environment variable secured by Azure Key Vault, never in the connector definition.
Basic auth: almost never
Basic authentication has one legitimate use case: a legacy internal system that offers nothing else, fronted by the on-premises data gateway. If you are considering Basic against anything on the public internet, stop and put an Azure Function in front instead.
Custom connectors are cheap to build and expensive to own. The build takes an afternoon; the maintenance takes years.
Lifecycle Management: Where Custom Connectors Live or Die
Most custom connector failures we see in the field are not build failures. They are lifecycle failures. The connector shipped fine; two release cycles later, it broke a dozen production flows and nobody could cleanly promote a fix. Treat the lifecycle as a first-class design concern, not a post-launch cleanup task.
Solution-aware from day one
A custom connector created outside a solution is a connector that will never promote cleanly. Solution-awareness is the prerequisite for connection references, for environment variables, and for anything resembling ALM. Create the connector inside the solution that will own it, and give it the publisher prefix your platform team uses for governed assets. See Microsoft's guidance on custom connectors in solutions for the mechanics.
Import order matters more than most teams realize. When you deploy a solution containing a custom connector, flows, and connection references, the connector must be imported before the connection references that point to it. Get the order wrong and the import fails with an error that reads like a platform bug but is actually a dependency problem. Bake the order into your deployment pipeline once and stop debugging it every release.
Connection references and environment variables
Dev, Test, and Production almost never share the same API host, the same OAuth app registration, or the same credentials. Connection references and environment variables are how you keep them separate without editing the connector for each environment. Store the host URL as an environment variable. Store the OAuth client ID and tenant as environment variables. Let the connection reference resolve to a different connection per environment.
For CI/CD, the Power Platform Build Tools and paconn CLI support pre-populated deployment settings files. A single JSON file, checked into source control, resolves the environment-specific values at import time. This is the difference between a five-minute promotion and a two-hour manual reconfiguration that no one wants to own.
Versioning: additive versus breaking
Microsoft's documentation offers a tip: if a connector change breaks existing connections, republish, remove the connection, and re-add it. That sentence understates the production impact by an order of magnitude. In an environment with a hundred flows sharing a connection reference, "remove the connection and re-add it" is a change window, a communication plan, and a maker retraining exercise.
Discipline the change model instead. Additive changes, new actions, new optional parameters, new response fields, are safe and should be the default. Breaking changes, renamed operations, removed parameters, restructured responses, should be rare and staged: ship a new connector version alongside the old, migrate consumers on a schedule, and retire the old only when telemetry confirms it is unused. From real builds, the teams that adopt this discipline stop having connector incidents. The teams that do not, keep having the same incident every quarter.
The Governance Layer: DLP Today, ACP Tomorrow
Custom connectors are still governed by classic Data Loss Prevention policies. Environment admins classify each connector by name into Business, Non-Business, or Blocked. Tenant admins can go further and classify by Host URL pattern, with ordered rules and a wildcard as the final entry. Get the naming and host URL conventions right on day one and DLP becomes trivial; get them wrong and every new environment is a re-classification project.
Advanced Connector Policies went generally available in June 2026 and change the model meaningfully: a strict allowlist, default-deny posture that replaces the older three-bucket classification. The important caveat for platform architects: ACP does not yet cover custom connectors. Classic DLP remains the control plane for custom connector governance today.
The forward-looking move is to design as if ACP already applied. Use predictable host URL patterns per environment. Use connector names that encode ownership and sensitivity. Keep an inventory that a policy engine could consume. When ACP extends to custom connectors, the organizations that already govern by pattern will flip a switch. The organizations that governed by exception will rebuild.
A Custom Connector Maturity Checklist
Before a custom connector ships to production, it should pass every item on this list. Before it renews for another year, it should still pass them.
- Named owner. A specific team, not a distribution list, owns the connector's roadmap, versioning, and incident response for at least the next 24 months.
- Solution-aware. The connector lives inside a managed solution with a governed publisher prefix, not in the default solution.
- Connection references and environment variables. Host URL, tenant, and client ID are environment variables. Consumers reference the connector through a connection reference, never a direct connection.
- Per-connector redirect URI. For OAuth 2.0 connectors, a dedicated redirect URI is registered in the Entra ID app registration, aligned with the February 2024 enforcement.
- Versioning strategy. A documented policy that classifies changes as additive or breaking, and a staged-migration playbook for breaking changes.
- DLP classification. The connector is explicitly classified in every environment where it is deployed, with a host URL pattern policy at the tenant level as a backstop.
- Monitoring and incident plan. Connector health is monitored (failure rate, latency, token refresh errors) and there is a documented response for upstream API changes.
Score honestly. Five out of seven is a connector that will survive. Three out of seven is a connector that will generate a Sev-2 incident within a year.
The 18-Month Test
Custom connectors are one of the most useful patterns Power Platform offers and one of the most over-used. The reason is not technical. It is that the build cost is visible and the ownership cost is not. An afternoon of work is easy to approve. A three-year maintenance commitment is not, but that is what you are actually authorizing.
Before you approve the next custom connector, apply the 18-month test. If you cannot name who will own this connector 18 months from now, when the upstream API changes, when the OAuth secret needs to rotate, when a new environment needs it classified, do not build it. Use HTTP with Entra ID. Wrap it in an Azure Function. Wait for the certified connector. The best Power Platform custom connectors are the ones that pass that test on the day they ship, and still pass it on the day they retire.

.avif)
.avif)