One at a time. Add a line on the Products page, pick product and instance, press the line's Push button.
In bulk. Add in Bulk opens a two-step wizard: step 1 is the standard Odoo product search (filter, group, tick individually or select all matching) - service products are excluded automatically; step 2 chooses the instance and the starting state:
Products already bound to that instance are skipped and reported, so running the wizard twice cannot create duplicates.
Push Queued Products (Products page > Perform Operation). Queues every To Push / Error binding of the chosen instance for the background pusher - the "catch up now" button.
Push Update on synced products. Products change - price, name, customs data. The Push Update button on a synced line re-sends the product's current Odoo data as an update (the connector knows to call the 3PL's update operation rather than create). Bulk-select lines and use the Push / Update at 3PL action to refresh many at once.
SKU, name, price and cost value, barcode where the provider takes one, weight (the 3PL expects integer grams - the connector converts), and customs data: HS code and country of origin from the product form travel with every create and update, so customs-relevant edits in Odoo propagate by pressing Push Update.
The connector checks whether the SKU already exists at the 3PL before creating, so a push against an existing SKU becomes an update rather than a duplicate-product error.
Providers that take richer product setup get it in the same push (currently ShipHero): the product's batch-tracking flag (whether the SKU needs lot tracking at the warehouse), its barcode, and its reorder levels - every Odoo reordering rule the product has for a mapped warehouse is mirrored onto the matching 3PL warehouse, minimum quantity as the reorder level and the refill up to maximum as the reorder amount, so the warehouse reorders at the numbers you maintain in Odoo. Reorder-level mirroring never fails a push: any problem is recorded in the push's Sync Log entry and the product itself still syncs.
Supplier push (enabled by the Inbound companion app - see ASNs and GRNs) sends vendor records to 3PLs that keep their own supplier master. On ShipHero the push does more: after creating the vendor, the connector links the vendor's catalogue - every product that vendor supplies according to Odoo's vendor pricelists (the product's Purchase tab), provided it has a SKU, is attached to the ShipHero vendor. Inbound purchase orders announced as ASNs then reference the right vendor and their products at the warehouse.