> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getruba.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Move Billing to Another Provider

> Transfer customer identities and saved payment methods without exposing card data

export const RubaSocials = () => {
  if (typeof document === "undefined") {
    return null;
  }
  const inject = () => {
    const footer = document.getElementById("footer");
    if (!footer || document.getElementById("ruba-socials")) {
      return false;
    }
    const isDark = document.querySelector("html.dark") || document.querySelector('html[class*="dark"]');
    const lineColor = isDark ? "#383838" : "#e8e8ed";
    const iconColor = isDark ? "#8e8e93" : "#86868b";
    const markColor = isDark ? "#ffffff" : "#08080c";
    const hoverColor = "#0071e3";
    const div = document.createElement("div");
    div.id = "ruba-socials";
    div.style.cssText = `display:flex;align-items:center;gap:20px;padding-top:20px;margin-top:20px;border-top:1px solid ${lineColor};width:100%`;
    const logo = `<a href="https://getruba.com" style="display:inline-flex;height:24px;align-items:center;gap:8px;text-decoration:none;color:${markColor};line-height:1;"><svg width="24" height="24" viewBox="0 0 120 120" aria-hidden="true" style="display:block;flex:none;"><g transform="translate(2.5 0)"><path d="M19 25h59L65.43 47H19a4 4 0 0 1-4-4V29a4 4 0 0 1 4-4Z" fill="${markColor}"/><path d="M19 73h31.57L38 95H19a4 4 0 0 1-4-4V77a4 4 0 0 1 4-4Z" fill="${markColor}"/><path d="M85 25h25L70 95H45Z" fill="#007AFF"/></g></svg><span style="display:inline-flex;height:24px;align-items:center;font-weight:600;font-size:15px;color:${markColor};letter-spacing:-0.01em;line-height:1;">Ruba</span></a>`;
    const spacer = `<div style="flex:1"></div>`;
    const ig = `<a href="https://instagram.com/getruba" target="_blank" rel="noopener" aria-label="Instagram" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"/><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"/><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"/></svg></a>`;
    const li = `<a href="https://linkedin.com/company/getruba" target="_blank" rel="noopener" aria-label="LinkedIn" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/></svg></a>`;
    const x = `<a href="https://x.com/getruba" target="_blank" rel="noopener" aria-label="X" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg></a>`;
    const github = `<a href="https://github.com/rubadot" target="_blank" rel="noopener" aria-label="GitHub" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 .7a11.5 11.5 0 0 0-3.64 22.4c.58.1.79-.25.79-.56v-2.24c-3.22.7-3.9-1.37-3.9-1.37-.53-1.34-1.29-1.7-1.29-1.7-1.05-.72.08-.71.08-.71 1.16.08 1.78 1.2 1.78 1.2 1.04 1.77 2.72 1.26 3.38.96.1-.75.4-1.26.74-1.55-2.57-.3-5.27-1.29-5.27-5.69 0-1.26.45-2.29 1.19-3.09-.12-.29-.52-1.47.11-3.05 0 0 .97-.31 3.16 1.18A10.96 10.96 0 0 1 12 6.09c.98 0 1.94.13 2.86.39 2.2-1.49 3.16-1.18 3.16-1.18.63 1.58.23 2.76.11 3.05.74.8 1.19 1.83 1.19 3.09 0 4.42-2.7 5.39-5.28 5.68.42.36.79 1.06.79 2.14v3.28c0 .31.21.67.8.56A11.5 11.5 0 0 0 12 .7Z"/></svg></a>`;
    div.innerHTML = logo + spacer + ig + li + x + github;
    footer.appendChild(div);
    return true;
  };
  if (!document.documentElement.dataset.rubaSocialsObserver) {
    document.documentElement.dataset.rubaSocialsObserver = "true";
    const observer = new MutationObserver(() => {
      if (!document.getElementById("ruba-socials")) {
        inject();
      }
    });
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });
  }
  setTimeout(() => {
    if (!inject()) {
      const interval = setInterval(() => {
        if (inject()) {
          clearInterval(interval);
        }
      }, 500);
      setTimeout(() => clearInterval(interval), 10000);
    }
  }, 300);
  return null;
};

<link rel="stylesheet" href="/style.css" />

<RubaSocials />

Leaving Ruba is a coordinated migration, not a card-data export. Payment methods are vaulted with Stripe under Ruba's Merchant of Record setup, so Ruba and the destination processor move them directly under payment-network and PCI rules.

<Note>
  Start by emailing [support@getruba.com](mailto:support@getruba.com) with the destination account. The process is support-assisted rather than self-serve.
</Note>

## Migration boundary

| Asset                                     | Transfer behavior                                                                              |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Customer identity and billing details     | Transferred                                                                                    |
| Saved payment methods                     | Transferred directly to Stripe or through secure PAN export to another PCI-compliant processor |
| Products, prices, discounts, and benefits | Recreate at the destination                                                                    |
| Active subscriptions                      | Recreate at the destination, align renewal dates, then cancel in Ruba                          |

Stripe-to-Stripe is the shortest path. A different processor must be able to receive Stripe's secure PAN export. Raw card details never pass through you, and customers should not need to enter them again.

## Sequence the cutover

<Steps>
  <Step title="Prepare the destination">
    Create and verify the account that will receive billing. Send its details to Ruba support so the organization can enter offboarding.
  </Step>

  <Step title="Move customer and payment records">
    Ruba coordinates a processor-to-processor transfer. This step preserves PCI boundaries and does not provide raw card data to your team.
  </Step>

  <Step title="Rebuild the commercial catalog">
    Recreate products, prices, discounts, and benefits using the destination provider's tools or API. Ruba does not produce a customized configuration export.
  </Step>

  <Step title="Recreate each active subscription">
    Set the first destination charge to the existing subscription's next Ruba renewal date. After the destination subscription is active, cancel its Ruba counterpart.
  </Step>

  <Step title="Close the remaining balance">
    When the 120-day reserve period has ended, withdraw the released amount to the connected bank account.
  </Step>
</Steps>

## What offboarding changes

Existing subscriptions continue to renew until you cancel them, but new checkouts are disabled. Payouts pause for 120 days after the final Ruba transaction. The reserve covers refunds and disputes that can arrive after the original payment; any remaining amount is released after that window.

<Warning>
  Do not leave matching subscriptions active at both providers. That can charge the customer twice. It also creates later Ruba transactions, which delays the start of the 120-day reserve window.
</Warning>

## Timing and edge cases

<AccordionGroup>
  <Accordion title="How long does the transfer take?">
    A migration to your own Stripe account can usually finish within a few business days. Other processors often require several weeks of coordination.
  </Accordion>

  <Accordion title="Does Ruba charge a migration fee?">
    No. Customer and saved-payment-method migration has no Ruba fee.
  </Accordion>

  <Accordion title="Can the destination be something other than Stripe?">
    Yes, provided the processor is PCI-compliant and can receive the secure PAN export.
  </Accordion>

  <Accordion title="What happens during the reserve window?">
    Refunds and disputes for Ruba-processed payments continue to be handled against the reserved balance. A remainder below the normal country payout threshold can be resolved with support.
  </Accordion>

  <Accordion title="What remains visible afterward?">
    Historical orders, invoices, and reports remain available during offboarding. Transaction records are retained for compliance for at least five years after processing.
  </Accordion>

  <Accordion title="Will customers need to update their cards?">
    The transfer is intended to avoid that. Their most visible change should be the new billing descriptor after the destination begins charging them.
  </Accordion>
</AccordionGroup>
