12 min readJorgAI TeamSep 1, 2026 · Last updated Oct 14, 2026

Can You Automate a Charles Schwab Account? Yes. The 2026 Setup Guide From a Live Integration

Investor reviewing his brokerage account on a tablet, representing automating a Charles Schwab account

You can automate trading in a Charles Schwab account, but nothing Schwab ships will do it for you. Schwab's own platforms, thinkorswim included, support conditional orders and alerts, and there is no native way to have a strategy scan the market and place trades day after day. Automation happens through the Schwab Trader API, either by writing software against it yourself or by connecting a platform that has already done that work. We built and run a production Schwab integration at JorgAI, so this guide covers the parts that are easy to get wrong: the sign-in flow, the weekly re-authorization, whole-share sizing, how orders and brackets are actually placed, and what to do before you turn anything on.

Schwab automation always runs through the Trader API and OAuth. You sign in on schwab.com and grant scoped access; the platform never holds your password. Any product asking for your Schwab login is doing it wrong.

What Schwab gives you on its own, and where it stops

thinkorswim can do more than most people use. Conditional orders, one-cancels-other brackets, and trailing stops can manage an existing position without you watching it. What it cannot do is decide what to buy next. There is no scheduled strategy runner, no way to say "scan for setups every hour and enter when the rules match," and no automation that survives you closing the app. That is the gap the Trader API exists to fill. If you already live in thinkorswim, our companion piece on what thinkorswim can automate and where it runs out draws that line in detail.

One thing to rule out early: Schwab Intelligent Portfolios is not trading automation. It is a robo-advisor that rebalances ETFs on a long horizon. If you were searching for that, our comparison of Intelligent Portfolios and automated trading explains the difference. Everything below is about active automation inside a standard brokerage account.

Your three options in 2026

Option 1: a no-code platform with a direct Schwab integration

Very few platforms connect to Schwab directly, because Schwab's API uses OAuth authorization with a real developer review rather than self-serve keys. The short list is in our honest roundup of Schwab-compatible bots. JorgAI is built for exactly this: you sign in on schwab.com, grant access, set your rules, and the AI scans the market during the session and places trades inside your existing Schwab account. Your money stays at Schwab. Setup takes a few minutes and involves no code. If you want to see it against your own account, start here.

Option 2: write your own bot against the Schwab Trader API

Schwab's developer program at developer.schwab.com lets individual traders request API access and build their own automation. It genuinely works. What you are signing up for, from our own build: an OAuth authorization code flow, access tokens that expire every 30 minutes, a refresh token with a 7-day lifetime, an account hash lookup before any order can be placed, order status reconciliation, and error handling for every market condition you did not anticipate. Budget for a software project, not a weekend script. The rest of this guide is useful either way, because a DIY bot hits the same walls a platform does.

What does not work

  • Password-sharing services and browser scripts. Anything that logs into schwab.com as you violates the terms you agreed to and puts your account at risk.
  • "Works with any broker" bots. These usually mean copy-paste signals or screen automation, not a genuine API integration. Real Schwab support is specific and rare.
  • Platforms that require moving your money. You can get automation without leaving Schwab, so a product that needs a transfer to its own brokerage should clear a very high bar first. Our platform comparison covers who actually holds your money.

Connecting Schwab step by step (the no-code path)

This is the exact sequence our integration uses. The full walkthrough is in the Help Center, and there is a 54-second video on the Schwab page.

  1. Have a Charles Schwab brokerage account. Accounts that came over from TD Ameritrade count; they connect the same way as any other Schwab account.
  2. In JorgAI, open Settings, then Broker, and pick the Schwab tile.
  3. Click Connect with Schwab. JorgAI generates a one-time state token that expires in ten minutes and sends you to Schwab's authorization page on schwabapi.com.
  4. Sign in with your Schwab credentials and two-factor code on Schwab's page, then approve access. JorgAI never sees either.
  5. Schwab sends you back to JorgAI with a short-lived code. JorgAI exchanges it for an access token and a refresh token, looks up your account, encrypts the tokens, and stores them. The page shows "Schwab connected."

Two details worth knowing. First, if your Schwab login has more than one brokerage account, JorgAI trades in the first account Schwab returns for that login. If you want automation in a specific account, keep that in mind when you approve access. Second, one Schwab account can be linked to one JorgAI profile. Trying to link the same account twice is blocked on purpose, so it can never be traded by two rule sets at once.

The weekly re-authorization, explained properly

This is the part nobody explains, and it is the number one reason a Schwab automation "stops working" for people who build their own. Schwab issues two tokens. The access token, which is what every API call uses, expires every 30 minutes. The refresh token, which mints new access tokens, expires after 7 days, and Schwab does not extend it. When the refresh token dies, the only fix is to sign in on schwab.com again. There is no way around this; it is Schwab's security policy, not a limitation of any one platform.

Here is what JorgAI does with that. A background job runs every 15 minutes and refreshes the access token for every connected Schwab profile, including profiles you are not currently switched to, so a normal week never produces an expired-token error during trading. When the 7-day limit hits and Schwab rejects a refresh, JorgAI leaves your settings and positions untouched, pauses new orders, and sends you an in-app notification plus an email asking you to reconnect. The nudge is sent once, not every 15 minutes. Reconnecting is the same one-click sign-in as the first time; your rules, profile, and trade history are still there when you come back.

If you are building your own bot, our deep dive on Schwab token refresh covers the mechanics: what to store, how to schedule the refresh, and how to detect the difference between a stale access token and a dead refresh token.

Whole shares only, and what that changes about position sizing

Schwab's Trader API accepts whole-share orders only. There is no fractional or Stock Slices support through the API. This one fact shapes how automation behaves in a Schwab account, and it is the most common reason a new user sees scans but no trades.

JorgAI handles it like this. Position sizing is expressed in dollars or as a percentage of your buying power. For Schwab, the resulting quantity is rounded down to a whole number of shares before the order is sent. If the size you set does not cover even one share at the current price, the trade is skipped and the activity log tells you why: "your sizing basis covers less than 1 whole share." Schwab never receives a fractional order from JorgAI. The Fractional Shares setting in JorgAI is disabled for Schwab connections for the same reason.

What this means in practice for smaller accounts: if the AI keeps proposing stocks priced above what one share of your sizing allows, set a maximum price per share in your trade settings so the candidates it considers are ones you can actually buy. And if you hold a fractional position at Schwab from before you connected, the API cannot sell it; that has to be done in the Schwab app.

How orders and brackets are actually placed

Entries go in as regular-session market or limit orders on the Trader API. When your rules include both a take-profit and a stop-loss, JorgAI sends the entry as a Schwab TRIGGER order with a one-cancels-other pair attached: a good-till-cancelled limit sell at your target and a good-till-cancelled stop at your stop-loss. The bracket lives at Schwab, so your exits are in place even when JorgAI is not looking. If Schwab rejects the bracket for a given order, JorgAI falls back to a plain entry and manages the exits itself from the server side, checking positions through the session.

One trap we learned the hard way: when a bracket leg is resting at Schwab, those shares are reserved. A later sell for the full position, from a trailing stop or a daily loss brake, would be rejected because the shares are already committed to the resting order. JorgAI cancels its own open sell orders on that symbol before liquidating, then re-reads the position and sells the real available quantity. If you build your own bot, budget for this; the rejection message from Schwab is not obvious about the cause.

Regular hours only

JorgAI's scanner and position monitor run during the regular session, 9:30 AM to 4:00 PM Eastern on trading days, and every order is submitted for the regular session. It does not place extended-hours orders on Schwab. Positions with a resting bracket at Schwab are still protected by that bracket; server-side exits resume at the next open.

Day-trade limits and automation

Automation does not exempt you from market rules. The pattern day trader rule ended in June 2026, but brokers have until late 2027 to complete the transition, so some Schwab accounts may still report a day-trade count during that window. JorgAI reads Schwab's own rolling round-trip counter on your account and respects whatever the account reports rather than fighting it. The background and what it means for smaller accounts are in our explainer on the end of the PDT rule. Settlement, margin, and market-hours rules apply to automated orders exactly as they do to manual ones.

Set these rails before you turn anything on

Whether you code it yourself or use a platform, automation should never run without hard limits. These are the ones we consider non-negotiable, and every one of them is a setting in JorgAI:

  • A stop-loss on every position, sent to Schwab as part of the bracket, not just tracked in software.
  • Position size caps, in dollars or as a percentage of buying power, sized so that one whole share is reachable.
  • A daily trade cap and a daily loss brake that halts new entries for the day when hit.
  • A maximum price per share, so the AI only considers stocks your sizing can actually buy in whole shares.
  • Optionally, an approval step: JorgAI can require you to confirm each buy before it is sent, which is a sensible way to run the first week.

Our guides to automating stop-losses and risk management strategies cover the reasoning. The short version is that the rules you set in advance are the ones that protect you when you are not watching, which is the entire point of automation done right.

Test with simulated money first

Schwab's API has no paper-trading environment, so you cannot rehearse against a fake Schwab account. What you can do is run the same AI and the same rules against a free brokerage paper account first, watch a week of scans, entries, and exits with real-time market data, and then connect Schwab for live trading. Every JorgAI account includes this; the setup is in our paper trading announcement. Note that JorgAI settings are per profile, so when you go live on Schwab you will re-enter your rules on the Schwab profile. Treat that as a feature: it forces you to look at every number once more before real money is involved.

If you are going the DIY route: an honest checklist

  1. Request API access at developer.schwab.com and wait for approval; it is a review, not an instant key.
  2. Implement the OAuth authorization code flow with a state parameter, and store both tokens encrypted.
  3. Refresh the access token on a schedule well inside 30 minutes, and detect the 7-day refresh expiry so you can prompt yourself to re-authorize instead of silently failing.
  4. Fetch the account hash from the accounts endpoint before placing orders; order endpoints are keyed by it, not by your account number.
  5. Send whole-share quantities only, and round down before you send.
  6. Cancel your own resting orders on a symbol before a full liquidation.
  7. Start with the smallest possible orders while you harden error handling, and log every rejection with Schwab's full response.

There is nothing wrong with building this yourself. Just go in knowing that the trading logic is the small part; keeping the connection alive and the orders correct is most of the work.

How to get started

  • No-code path: create a JorgAI account, pick Schwab under Settings and Broker, sign in on schwab.com when prompted, set your risk rails, and enable auto-trading when you are comfortable. Paid plans start at $14.99 a month with a 7-day free trial and no credit card to start.
  • DIY path: request access at developer.schwab.com, build the OAuth flow, and work through the checklist above with tiny orders first.

Either way, review Schwab's own guidance on third-party access in its security center so you know how to revoke an app's access if you ever need to. For how to evaluate any bot before connecting it, see how to connect a trading bot to your brokerage safely. If you are still deciding on a broker, Schwab compared with the other brokers we support lays out the trade-offs, and the no-code automation guide covers the broader landscape.

If you were considering routing TradingView alerts instead, note that TradersPost still has Schwab on its wait list; our TradersPost comparison covers what that means for a Schwab account.

Frequently asked questions

Does Charles Schwab allow automated trading?

Yes, through its Trader API with OAuth authorization. Schwab does not offer built-in auto-trading in its own apps, but API-based automation is supported and legitimate. Access is granted on schwab.com and can be revoked there at any time.

Why do I have to re-authorize Schwab every week?

Schwab's refresh token expires after 7 days and cannot be extended. Access tokens expire every 30 minutes and are refreshed automatically in between. When the weekly limit hits, JorgAI pauses new orders, keeps your settings and positions, and notifies you in the app and by email; reconnecting is a one-click sign-in.

Can the AI buy fractional shares in my Schwab account?

No. Schwab's API is whole shares only. JorgAI rounds each order down to a whole number of shares and skips a trade, with a note in your activity log, when your sizing does not cover one share. Setting a maximum price per share keeps the AI's candidates within reach.

Do I have to move my money to automate a Schwab account?

No. A direct integration trades inside the Schwab account you already have. JorgAI's connection can place and cancel orders and read balances; it has no withdrawal permissions.

Does it work with my old TD Ameritrade account?

Yes, once the account has migrated to Schwab. It connects exactly like any other Schwab account. If you relied on thinkorswim conditional orders before, those still work alongside the automation.

Does automated trading run after hours on Schwab?

JorgAI submits regular-session orders and runs its scanner during regular market hours. Brackets already resting at Schwab remain in place; new entries wait for the next open.

Let the AI do the trading.

Set it up in minutes. 7 day free trial on Starter and Pro.

Get started free