Migrate from PingFederate to Keycloak

A application-by-application path from PingFederate to self-hosted Keycloak, covering what moves cleanly, what needs rework, and how to run both during cutover.

On this page

Migrate from PingFederate to Keycloak: what the move involves

If a renewal, a licensing change or a residency requirement has put PingFederate under review, the move to Keycloak is feasible application by application. The effort depends mainly on how many SAML and OIDC connections PingFederate carries and on whether any of them depend on WS-Federation or WS-Trust, which Keycloak does not cover. Start by counting connections, then sort them by protocol and by how much custom logic sits behind each one. Keycloak supports OpenID Connect, OAuth 2.0 and SAML 2.0, so most relying parties on those protocols can be moved one at a time while PingFederate keeps serving the rest.

The work is usually shared. The platform team stands up and operates the Keycloak cluster and its database. The security team owns the signing certificates, token lifetimes, MFA policy and the sign-off on each cutover. Application teams confirm which claims they read, change redirect URIs and test sign-in. The risk is low for plain SAML and OIDC relying parties that use standard attributes. It is higher where PingFederate adapters perform custom logic, where attribute contracts are built from directory lookups or transformations, or where WS-Federation relying parties exist. Those cases need a separate design, and the sibling page on migrating to WSO2 Identity Server covers the WS-Federation case.

Before scheduling any cutover, ask the team to export the PingFederate configuration and build an inventory of every connection, its protocol, its signing key and the attributes it expects. Confirm with the application owners what each one actually reads, because undocumented claims are the usual source of failed cutovers. Plan to run both systems in parallel for each application, with a rollback path that re-points the application to PingFederate. Keycloak's server administration guide describes the client, flow and mapper settings you will need to match each existing contract.

Which PingFederate capabilities map to Keycloak, and which need rework

This table maps each PingFederate capability in a typical federation estate to its Keycloak equivalent and marks it as clean, needs rework or gap. Read it as a checklist for your inventory: clean rows usually need configuration only, rework rows need redesign or testing, and gap rows need a decision before cutover. WS-Trust and adapter-specific behavior should be confirmed against your own environment and Keycloak's current documentation.

PingFederate capabilityKeycloak equivalentStatus
SAML 2.0 SP connections (PingFederate as IdP)SAML clients in a realm, with signing keys and assertion settings per clientClean
SAML 2.0 IdP connections (PingFederate as SP to upstream IdPs)Identity brokering with a SAML identity provider, plus mappers for returned attributesClean
OIDC and OAuth 2.0 clientsOpenID Connect clients with scopes, redirect URIs and client authenticationClean
OAuth access token and scope policiesClient scopes, protocol mappers and token lifespan settings; confirm claim shapes with each relying partyNeeds rework
Attribute contracts and attribute mappingProtocol mappers and user attribute mappers; any transforms in adapter or PingFederate-side logic must be rebuiltNeeds rework
Authentication policies and adapters (HTML form, Kerberos, custom adapters)Authentication flows and execution providers; custom Java adapters need rewriting as Keycloak SPIsGap
Authentication policy contracts and conditional selectionConditional flows and required actions; complex policy branching needs redesign and testingNeeds rework
Signing and encryption certificatesRealm keys and per-client certificates, imported or generated; plan rotation and relying party trust updatesNeeds rework
LDAP and Active Directory user sourcesUser federation providers for LDAP and Active Directory, with attribute and group mappersClean
Attribute sources via JDBC or custom data storesUser storage SPI or database-backed federation; custom code is a gap to scopeGap
WS-Federation relying partiesNot supported as a native protocol in Keycloak; plan a separate path such as WSO2 Identity Server or a bridgeGap
WS-Trust security token servicesNot covered by Keycloak's protocol set; confirm exact WS-Trust behavior against your environment and Keycloak's current documentationGap

What moves cleanly and what does not

Most SAML and OIDC relying parties move to Keycloak with client and mapper configuration rather than new code, because Keycloak supports OpenID Connect, OAuth 2.0 and SAML 2.0 and has built-in user federation with existing LDAP and Active Directory servers. For each PingFederate SP connection or OAuth client, the work is to recreate the client in the target realm, match the redirect URIs and signing certificates, and rebuild the attribute contract with protocol mappers so the claims or SAML attributes the application expects arrive unchanged. The attribute contract is where most silent failures occur, because an application can still log users in while reading a different name, email or group value. Test each connection with a user whose attributes you have recorded from the live PingFederate response.

WS-Federation and WS-Trust are the exception. Keycloak's supported protocols are OpenID Connect, OAuth 2.0 and SAML 2.0, so any relying party that depends on WS-Federation passive sign-in or WS-Trust token issuance needs its own plan before cutover. Confirm this inventory early by checking each connection's protocol type and each consuming application's documentation, including older Microsoft 365 and SharePoint integrations that may still use these endpoints. Options include keeping PingFederate running for those relying parties, or moving them to a platform that supports WS-Federation, as covered in the WSO2 migration page.

Do not treat a PingFederate configuration archive and a Keycloak realm export as interchangeable. The Keycloak server guide documents realm export and import as JSON files with kc.sh export and kc.sh import, but warns about limitations as a backup and restore mechanism and requires all nodes to be stopped during the operation. Keep your own backup of Keycloak's database and configuration as-code, and keep the PingFederate archive as the source record for the inventory, noting that it contains private keys and must be handled accordingly. Ask your Keycloak implementation partner how realm data, secrets and client certificates will be restored and tested before any production cutover.

Which exports and integrations to inventory before any build

A Keycloak build is only as complete as the inventory behind it. The items below cover what PingFederate exports, what it leaves out, and which dependencies sit outside Ping entirely. Work through them before estimating any cutover.

PingFederate configuration archive

Ping provides a configuration archive export that captures much of the server setup, including connections and OAuth clients. Treat it as the starting point, not the full inventory, because it leaves out items you will need to rebuild. Confirm the exact contents for your PingFederate version against Ping's documentation before you rely on it, and record what the archive does and does not hold.

Gaps the export does not cover

Expect the archive to omit adapter driver files, custom templates, and the license file. Each one has to be located and documented separately, because a Keycloak flow cannot reproduce a custom adapter's logic by copying a configuration value. Check the host filesystem and deployment scripts for these assets, and note which ones depend on Ping-specific libraries.

SAML and OIDC connection inventory

Build one row per SAML service provider, OIDC client and OAuth client, with its protocol, entity ID or client ID, redirect URIs, signing and encryption certificates, and the attribute contract it expects. Mark which connections use WS-Federation or WS-Trust, because those need a separate path. Use this inventory as the master list for the application-by-application cutover.

Adapter and attribute contract mapping

Each PingFederate adapter supplies the user identity and attributes that a connection sends. Record the attribute source, the name the relying party expects, and any transformation applied. These become Keycloak protocol mappers and user attribute definitions. Gaps here usually show up as missing claims after cutover, so test each mapping against the relying party.

LDAP and Active Directory user sources

Identify each directory PingFederate authenticates against, including the bind account, search base, and attributes read. Keycloak can federate existing LDAP and Active Directory servers, so you may keep the directory as the source of truth and avoid moving identities. Confirm which group and attribute data your relying parties depend on, and whether password validation stays in the directory.

Relying party application configuration

Each downstream application holds its own settings: callback URLs, signing certificate thumbnails, logout endpoints, and role mappings. Collect these from the application owners, not only from Ping. Plan a change window per application, and keep the old PingFederate connection live until the application confirms login and logout work against Keycloak.

How the migration runs, step by step

The sequence moves PingFederate connections to Keycloak one relying party at a time, so each application is proven on the new IdP before its traffic leaves PingFederate.

  1. Inventory every PingFederate connection

    Your identity team, with the owners of each relying party, lists every SAML service provider, OIDC client, OAuth client and WS-Federation or WS-Trust dependency that PingFederate serves. For each entry, record the protocol, the binding or grant type, the redirect URIs, the signing and encryption certificates, the attribute contract, the adapter or data store that supplies the attributes, and the business owner. Use the configuration export as the starting point, then confirm with application owners because the archive does not describe how each app actually uses its login. The output is an inventory register with one row per connection and a column marking which entries need WS-Federation handling. The step is done when every owner has signed off their row.

  2. Build and harden the Keycloak test realm

    Deploy Keycloak in a non-production environment, configure its production database and TLS settings, and create a test realm that mirrors the user sources PingFederate uses, such as LDAP or Active Directory federation. Map each attribute contract entry to a client scope, protocol mapper or user attribute, and set up the same signing certificates so relying parties need minimal change. Keep the Keycloak Operator update mode on manual approval so upgrades do not happen unannounced. The output is a test realm with a documented configuration and a list of attribute mapping decisions. The step is done when test logins succeed for a sample user from each user source.

  3. Pilot with one low-risk relying party

    Choose one internal application with a small user group, a clear owner and a rollback path that does not depend on PingFederate being unavailable. Register it in the test realm, point it at Keycloak in a controlled window, and run login, logout, attribute release, group or role claims and session expiry checks. Record any differences in issued claims or token lifetimes and fix them in the realm before expanding. The output is a pilot sign-off record listing the tests run, the defects found and the owner's approval. The step is done when the owner accepts the result in writing.

  4. Run both identity providers in parallel

    Keep PingFederate serving production while Keycloak serves the migrated applications in staging and then in limited production. For each application, decide whether users get the new IdP through a pilot group, a DNS or redirect change, or a metadata swap, and document how to revert. Monitor sign-in success, error rates and support tickets from both sides, and keep certificate and metadata inventories current as each connection moves. The output is a parallel-run log for each application and a status column in the inventory register. The step is done when every application in scope has run on Keycloak for a period the owner agrees.

  5. Cut over application by application

    For each relying party, the team executes a written cutover runbook: freeze configuration changes, update the application's metadata or client settings to Keycloak, switch traffic, run post-cutover smoke tests, and confirm rollback steps are still valid. Schedule each cutover with the application owner, and do not batch several applications into one window, so that any fault can be traced to one change. The output is a cutover runbook per application with timestamps, test results and the owner's acceptance. The step is done when the application signs in only through Keycloak and PingFederate logs show no further use of its connection.

  6. Retire WS-Federation dependencies separately

    Relying parties that depend on WS-Federation or WS-Trust cannot move to Keycloak under this path, so the team confirms that each one is either retired, replaced with a SAML or OIDC integration the owner can support, or assigned to the separate WSO2 Identity Server migration. Record the decision and the owner for each. The output is a decision list for WS-Federation and WS-Trust relying parties. The step is done when no connection remains unassigned.

  7. Decommission PingFederate and record the outcome

    After every in-scope connection has run on Keycloak, the team confirms that PingFederate has no remaining active connections, takes a final configuration archive and encrypts it under your key management policy, and then stops the service in a controlled change. Keep the archive for as long as your retention rules require, remove or revoke certificates and administrator access that no longer apply, and update the asset register. The output is a decommission record listing the final archive location, the access removal evidence and the date of shutdown. The step is done when the record is approved by the identity owner and filed with your audit evidence.

How the work changes by starting point

This is the most direct case. If every relying party uses SAML 2.0 or OpenID Connect, Keycloak can take over the federation role application by application, and the work is mostly inventory, claim mapping and testing. The scope is bounded by the number of connections and the attribute contracts each one depends on.

  • Connection inventory: List every SP and OAuth client, with its protocol, signing and encryption certificates, redirect URIs and the attributes it expects.
  • Mapper translation: Rebuild attribute contracts as Keycloak protocol mappers and client scopes, and confirm name formats and NameID choices match what each application already accepts.
  • Certificate handling: Plan key rollover for each client, since signing keys do not carry over automatically from the old server.
  • Parallel running: Keep PingFederate serving unmigrated connections while Keycloak takes the migrated ones, using a test tenant or staging hostnames first.
  • Pilot selection: Start with a low-risk internal application to prove the process before moving customer-facing connections.

Before committing, confirm with your application owners that each client's protocol settings are documented somewhere other than the PingFederate console.

What drives cost and duration in this migration

What is the biggest driver of cost when moving from PingFederate to Keycloak?

The number of relying parties and how much each one differs from the others is the largest single driver. Every SAML or OIDC connection needs its own client, redirect URIs, signing certificates, attribute mappings and a test pass, so a estate with many connections costs far more than one with a few shared patterns. Teams that group connections by protocol and attribute needs usually reduce the work because similar apps can share a template. Ask any quote to state the relying party count, the number of distinct patterns, and how many connections are retired rather than moved.

How do PingFederate adapters and attribute contracts affect the migration effort?

Custom adapters and deep attribute contracts take the most engineering time because Keycloak has no direct equivalent to every PingFederate adapter. Each adapter has to be traced to the user source it reads, then rebuilt as a Keycloak user federation provider, an identity broker, an authenticator or a protocol mapper. Simple contracts that map to standard claims are cheap to move. Ask the quote to list each adapter, its purpose, whether its source code is available, and who maintains it today.

Does WS-Federation or WS-Trust support add scope that changes the price?

Yes. Keycloak supports OpenID Connect, OAuth 2.0 and SAML 2.0, so any relying party that depends on WS-Federation or WS-Trust needs a separate decision. Those connections may need a different platform, a gateway, or a rebuild of the relying party, and that work is not covered by a standard Keycloak configuration. Confirm early which connections use WS-Federation or WS-Trust, because they can change the timeline and the number of platforms in scope.

How does the user directory design change the work and the ongoing cost?

The user store determines how much data moves and how identities stay synchronized during cutover. Keycloak can federate existing LDAP and Active Directory servers, which can reduce data migration but keeps those directories in the critical path. Moving users into Keycloak itself adds an import step and a plan for password handling, since password hashes may not export from every source. Ask the quote whether the directory stays authoritative, how attributes are synchronized, and how many user stores are involved.

How do high availability and database choices affect the recurring cost?

High availability is mostly a recurring cost, since it needs more nodes, a supported production database and a synchronously replicated database for the documented designs. Keycloak supports several production databases, and the choice depends on what your organization already operates and supports. Infrastructure, database licensing where it applies, and the staff who run failover all recur every month. Ask the quote to separate the one-time build of the cluster from the ongoing operation and to name the database it assumes.

What testing and sign-off work should be budgeted for each application?

Testing is often the largest share of effort that teams underestimate. Each relying party needs login, logout, session and attribute tests, and the business owner should confirm the result before the connection moves. Running PingFederate and Keycloak in parallel during cutover also means extra monitoring and rollback planning. Ask the quote for the test scope per connection, who signs off, how rollback is handled, and whether the parallel run period is included.

Who pays for what: internal staff, an implementation partner or a support subscription?

Internal staff own the business decisions, application owner testing and access to relying party code, and their time is usually the largest unseen cost. An implementation partner, such as DeployOpen on a fixed written scope, is paid for planning, implementation, testing and documentation of the agreed work. A Keycloak support subscription is recurring and is bought separately from the software, which is licensed under Apache 2.0. Ask each quote to name who pays for each item and which items are one-time versus monthly or annual.

How does the Keycloak upgrade cadence affect ongoing cost?

Keycloak plans four minor releases a year and a major release every two to three years, and says breaking changes in a minor release will be opt-in. That cadence means upgrades are a recurring task, and the cost depends on how often you take them and how much custom code you run. Operator updates should use manual approval mode to avoid unplanned upgrades. Ask the quote how upgrades are scheduled, who tests them, and whether the upgrade effort is included in a retainer or billed separately.

What usually goes wrong and how to prevent it

Most failed PingFederate to Keycloak cutovers break at the edges: attribute names, signing keys, session behavior and ownership. The cards below cover the failure modes we see most often in federation moves, each with a prevention step you can check before the first application goes live.

Attribute and claim mismatches

PingFederate attribute contracts often map a directory field into a SAML attribute or OIDC claim with a transform that nobody wrote down. Keycloak needs an explicit mapper for each of those values, and a missing or differently formatted claim usually shows up as a login that succeeds with the wrong role or an empty email field. Before cutover, capture a real assertion or ID token from the current flow and compare it field by field with the Keycloak output for the same test user.

Certificate and signing key rotation

Each SAML relying party holds a copy of the IdP signing certificate, and each OIDC client may pin keys or metadata URLs. When Keycloak is introduced, it generates its own realm keys, so every relying party must import the new metadata or certificate before its traffic moves. Record the expiry date of each existing certificate, schedule the replacement with the application owner, and confirm that old and new keys are both trusted during the overlap window.

Token lifetime and session differences

PingFederate and Keycloak set access token lifetimes, refresh behavior, SSO session idle and maximum timeouts, and logout propagation through different settings. An application that tolerated long-lived sessions on the old IdP can start forcing sign-in more often, or the reverse, and single logout may stop reaching some apps. Document the current values per connection, set the matching values in the Keycloak realm or client, and test idle timeout and logout from each application.

Skipped WS-Federation dependencies

Some PingFederate connections serve WS-Federation or WS-Trust relying parties, typically older Microsoft or line-of-business applications. Keycloak covers OpenID Connect, OAuth 2.0 and SAML 2.0, so a WS-Federation consumer left out of the inventory will break at cutover with no obvious error on the Keycloak side. Flag every connection that uses WS-Federation or WS-Trust in the inventory and route each one to a separate decision before the project plan is approved.

Operator and upgrade drift

When Keycloak runs on Kubernetes through the Keycloak Operator, automatic operator updates can move a production cluster to a new version without a change window. The Keycloak Operator documentation strongly recommends manual approval mode for operator updates for this reason. Set the approval mode before go-live, pin the Keycloak version in your manifests, and treat each upgrade as a tested change that re-runs the application login checks from the inventory.

Running both IdPs without owners

During cutover, some applications point at PingFederate while others point at Keycloak, and nobody is sure which one authenticates a given app on a given day. Drift appears when a user lists are updated in one system and not the other, or when someone changes a connection in PingFederate after its Keycloak twin is live. Assign one named owner per application, record in the inventory which IdP is authoritative, and remove the old connection only after the owner signs off on the cutover date.

Running Keycloak in production after cutover

The first production decision after cutover is the database, because Keycloak stores realms, clients, sessions and user data there and nothing else. Keycloak supports several production databases, including PostgreSQL 14 to 18, and its built-in dev-file database is for development only. If your PingFederate estate has been running with its own data store, confirm which database engine your platform team already operates and supports, and confirm that the version you choose falls within the supported range before you build. Size the database for session load from every migrated application, not only the number of users, and confirm sizing with a load test that mirrors your peak login hours.

High availability is the second decision, and it changes the database requirements. Keycloak documents a single cluster that can be spread across availability zones, a multi-cluster design (v2) that does not need an external Infinispan cluster, and a deprecated multi-cluster v1 design. Both supported designs require a synchronously replicated database, so a cross-site database replication setup needs to be validated before you rely on it for sign-in. Ask your team to document the failover behavior of the database and the Keycloak nodes, and run a failover test with a set of representative applications signing in during the test. Treat the HA choice as something to confirm against your own network latency, recovery objectives and staffing, not something to copy from another deployment.

Upgrades and monitoring complete the picture. Keycloak migrates its database schema automatically at startup by default, which suits small and mid-sized deployments, while the upgrading guide suggests manual migration for large deployments, where administrators apply the SQL themselves. Decide which path you will use before the first upgrade, and keep the Keycloak Operator in manual approval mode if you deploy on Kubernetes. Finally, enable the metrics endpoint described in the observability documentation and alert on login failures, token errors and database connection health, so that the federation hub is watched as closely as the PingFederate server it replaced.

Questions buyers ask before moving from PingFederate to Keycloak

How much effort and cost should we expect to move from PingFederate to Keycloak?

The cost depends mostly on how many connections you run, how many of them use custom adapters or attribute logic, and whether any relying parties depend on WS-Federation or WS-Trust. No price or effort figure is supplied for this move, so ask for one based on a written inventory. Cost falls into a few components: the discovery and inventory work, the mapping of each adapter and attribute contract to Keycloak clients, flows and mappers, testing with each application owner, and the parallel running period during cutover. Keycloak itself is licensed under Apache 2.0, so the software licence line is zero, but production hosting, database operations, and any support subscription recur. Ask any implementation partner to price each cost component separately, and ask which items are one-time and which recur.

How long does a PingFederate to Keycloak migration take?

The pace is set by the number of applications, the complexity of each connection, and how fast application owners can test. No duration is supplied for this move, so treat any timeline as something to agree in writing after the inventory is complete. Migrating application by application lets you move low-risk SAML and OIDC connections first and leave WS-Federation relying parties for a later decision. Test windows, change approvals and the need to keep both identity providers running during cutover will usually set the calendar more than the configuration work does. Ask for a timeline that lists each wave of applications, the owner who signs off each one, and the rollback step for each wave.

Can our internal team migrate PingFederate to Keycloak without outside help?

Yes, a team with experience in SAML, OIDC and directory integration can run the migration, and Keycloak's documentation covers realms, clients, identity brokering and user federation. The harder part is usually the discovery work: finding every connection, its owner, its certificates and its attribute dependencies, including connections nobody has touched for years. Keycloak's own export and import commands are not a complete backup mechanism, and its documentation warns that all nodes must be stopped while a realm export runs, so the team also needs a tested operating plan. If internal staff lack time or recent federation experience, a fixed-scope engagement with written deliverables is one option. DeployOpen plans, implements, integrates and documents self-hosted platforms in your own infrastructure, though it does not issue audit reports.

What do we need to provide during a PingFederate to Keycloak migration?

The project needs access to the PingFederate configuration, a named owner for every application that federates through it, and dedicated test windows for each application. Start with an export of the configuration archive, which holds connections, OAuth clients and certificates but leaves out items such as adapter drivers and the license file, so you will also need those from your own records. For each connection, record the protocol, the service provider metadata, the attributes sent, the signing and encryption certificates, and the business owner who approves a change. Test windows should include a user acceptance test, a rollback path and a period where the old and new identity providers both serve the application. Confirm with your Ping administrators and application teams which of these items already exist.

Can Keycloak replace WS-Federation and WS-Trust from PingFederate?

Keycloak supports OpenID Connect, OAuth 2.0 and SAML 2.0, so it covers SAML and OIDC relying parties directly. The supplied facts do not confirm WS-Federation or WS-Trust support in Keycloak, so do not assume a like-for-like replacement. Check every relying party for WS-Federation or WS-Trust dependencies before planning the move. Where those dependencies exist, you have several paths: move the relying party to SAML or OIDC if its vendor supports it, keep a separate component for those applications, or plan a move to WSO2 Identity Server, which supports WS-Federation. Confirm the protocol coverage of any candidate platform against its current documentation before you commit.

Do we need a Keycloak support subscription to run it in production?

Keycloak is Apache 2.0 licensed, so the software itself does not require a licence fee to run. Whether you need paid support depends on your internal skills, your uptime obligations and how much on-call coverage you can staff. Red Hat offers a supported distribution called Red Hat build of Keycloak, which replaces Red Hat Single Sign-On, and the Red Hat product page lists version 26.6 as its latest. Ask any support provider which Keycloak versions it covers, its response terms and whether it covers upgrades. The support decision should be weighed against your own operations cost, not treated as a licence cost.

How do we keep Keycloak current after the migration?

Keycloak plans four minor releases a year and a major release every two to three years, and it says breaking changes in minor releases will be opt-in, according to its October 2024 release update. The current release is 26.8.1, published October 13, 2026. Plan for regular upgrades in your operating budget, and read the upgrading guide before each one. The Keycloak Operator documentation strongly recommends manual approval mode for operator updates to avoid unintended automatic upgrades. Database schema migration runs automatically at startup by default, but large deployments can apply the SQL manually, so decide that during design.

How DeployOpen scopes and runs this migration

DeployOpen plans, implements, integrates, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure. For a PingFederate to Keycloak move, we start from a written inventory of your connections and build the Keycloak side application by application, with both systems running during cutover.

How we scope

  • Inventory every PingFederate SAML and OIDC connection, OAuth client and certificate before estimating any work
  • Flag WS-Federation and WS-Trust relying parties early, since they may need a separate platform decision
  • Agree scope, deliverables and timelines in writing before any build work starts

How we build

  • Map each adapter and attribute contract to Keycloak clients, flows and protocol mappers
  • Stand up Keycloak in your environment with a supported production database and tested configuration
  • Test each migrated application in a staging realm with its real login, logout and attribute flows

How we hand over

  • Document the connection inventory, mapping decisions, cutover runbook and rollback steps
  • Run both PingFederate and Keycloak in parallel for each application until your team signs off
  • Train your administrators on realm, client and user federation management in Keycloak

How we support

  • Offer ongoing support, upgrades and continuous testing as a retainer after handover
  • Help plan Keycloak minor release upgrades and review breaking-change notes before each update
  • Keep backup and restore procedures tested, since realm export is not a full backup mechanism

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.