TrackKaro Pakistan – Courier Tracking & COD

Description

TrackKaro is a serviceware plugin. It connects your WooCommerce store to the TrackKaro platform (https://trackkaro.pk), an external paid SaaS service operated by DANGO Solutions. All courier API connections, status polling, and tracking data processing happen on the TrackKaro servers — not locally on your WordPress installation. A TrackKaro account is required; new accounts include a free trial with no credit card needed.

Pakistani e-commerce stores lose hours every week manually checking courier websites and copy-pasting tracking numbers into order notes. TrackKaro fixes that.

Connect your WooCommerce store once, and TrackKaro automatically polls your courier APIs in the background, updates every order’s status, notifies your customers, and marks orders complete the moment a delivery is confirmed — all without you lifting a finger.

Supported Couriers:

  • ✅ PostEx
  • ✅ TCS
  • ✅ Leopards Courier (API + real-time Push/webhook support)
  • ✅ CallCourier
  • ✅ Sonic / Trax
  • ✅ Daewoo FastEx
  • ✅ M&P Courier

A free TrackKaro account is required. Sign up at trackkaro.pk — no credit card required for the free trial.

Why TrackKaro?

Pakistan’s courier APIs are fragmented, inconsistent, and go down without warning. TrackKaro’s server layer normalises statuses across all couriers into one clean format, handles retries, and keeps your store’s data accurate even when a courier API is having a bad day. You get dedicated tracking infrastructure without building or maintaining any of it yourself.

Key Features:

Automatic Status Sync

TrackKaro polls your couriers in the background via WP-Cron. Statuses update from “In Transit” to “Out for Delivery” to “Delivered” automatically — no manual refreshes.

Branded Customer Tracking Page

Every order gets a tracking page on your own domain. Customers click the link in their order email and see the full delivery timeline — your store name, your colours, your brand.

Real-Time Leopards Push Updates

Leopards Courier can push status updates to TrackKaro the moment they happen (no polling lag). Your orders update within seconds of a courier scan.

Courier Order Creation

Create shipment bookings with PostEx and Leopards directly from the WooCommerce order screen — COD, prepaid, and zero-value orders all supported. No need to log into courier portals.

Bulk Tracking Import

Got a spreadsheet of tracking numbers? Import them all at once via CSV. TrackKaro creates jobs for each one and starts syncing immediately.

Auto-Complete Orders on Delivery

When a parcel is delivered, TrackKaro can automatically mark the WooCommerce order as Completed.

Order List Tracking Column

See every order’s live courier status right in the WooCommerce Orders list.

Dashboard Widget

A quick-glance widget on your WordPress dashboard shows active shipments, deliveries this month, and your delivery rate.

Customer Status Email Notifications

Optionally send automated email updates to customers when their parcel moves to key milestones (dispatched, out for delivery, delivered). Works via TrackKaro’s mail server or your own SMTP.

HPOS Compatible

Fully compatible with WooCommerce High-Performance Order Storage (custom order tables). Tested with WooCommerce 5.0 through 9.x.

How It Works:

  1. Install the plugin and activate it on your WooCommerce store.
  2. Sign up for a free TrackKaro account at trackkaro.pk (takes 2 minutes).
  3. Copy your API token from the TrackKaro dashboard and paste it into WooCommerce TrackKaro Settings.
  4. Done. Add a tracking number to any order and TrackKaro takes it from there.

Your free trial includes a set number of tracking jobs so you can test with real orders before subscribing.

Pricing:

TrackKaro uses a prepaid credit model billed in PKR. Buy a plan that fits your monthly order volume. No hidden fees. No long-term contracts. See current plans at trackkaro.pk.

External Services

This plugin is SERVICEWARE. It has no standalone tracking functionality — it is a connector to the TrackKaro external platform. All courier tracking, status polling, API calls to courier companies, and shipment management are processed exclusively on TrackKaro’s servers. None of this processing can be replicated locally by the plugin code itself.

A paid account with TrackKaro is required. New accounts receive a free trial (no credit card needed), but continued use requires a prepaid PKR credit plan purchased at https://trackkaro.pk. The API key that connects this plugin to the service is obtained only after signing up.

This plugin connects to the TrackKaro platform (operated by DANGO Solutions, https://solutions.dango.pk) to provide all courier tracking and order management functionality. This connection is mandatory — the plugin cannot function without it, as all courier API communication and data processing occurs on the TrackKaro servers, not locally on your WordPress site.

Service details:

  • Service name: TrackKaro
  • Service URL: https://trackkaro.pk
  • API endpoint: https://trackkaro.pk/api/v1/
  • Operated by: DANGO Solutions (https://solutions.dango.pk)
  • Privacy Policy: https://trackkaro.pk/page/privacy-policy
  • Terms of Service: https://trackkaro.pk/page/terms-of-service

What data is sent and when:

  1. On every tracking sync (every ~5 minutes for active orders): The plugin sends your WooCommerce order’s tracking number, courier name, and an internal order reference to the TrackKaro server. The server queries the courier’s API and returns the current status, location, and event history.

  2. On plugin activation and settings save: Your store’s domain and the API token you entered are sent to TrackKaro to verify the connection. No customer data is included.

  3. On courier order creation (PostEx / Leopards): When you create a shipment booking from the WooCommerce order screen, the customer’s name, phone number, delivery address, order amount, and parcel details are sent to TrackKaro, which forwards them to the courier’s booking API to create the shipment. This transmission only occurs when you explicitly click the “Generate Courier Order” button.

  4. On customer email notifications (if enabled): The customer’s email address (stored on the order) may be sent to TrackKaro’s mail server to deliver tracking update emails. This feature is off by default and must be explicitly enabled by the shop owner.

What is NOT sent: Payment details, billing addresses, card numbers, or any information beyond what is listed above. TrackKaro acts solely as a tracking and logistics coordination service.

No tracking functionality can be performed locally — this plugin is specifically designed to work with the TrackKaro external service. If you do not agree to the TrackKaro Terms of Service and Privacy Policy, this plugin is not suitable for your store.

Installation

  1. In your WordPress dashboard go to Plugins Add New Upload Plugin.
  2. Upload the trackkar-woo.zip file and click Install Now.
  3. Activate the plugin.
  4. Go to WooCommerce TrackKaro Settings.
  5. Paste your API token from your TrackKaro dashboard.
  6. Click Save Settings. The plugin will verify your token and confirm the connection.
  7. Open any WooCommerce order and add a tracking number — TrackKaro will start syncing within the next cron cycle (typically within 5 minutes).

First time? Create your free account at trackkaro.pk before step 4.

FAQ

Does this plugin work without a TrackKaro account?

No. TrackKaro is a SaaS platform — the plugin is the bridge between your WooCommerce store and the TrackKaro server, which handles all courier API connections, status normalisation, and background polling. You need a TrackKaro account to use it. New accounts include a free trial so you can evaluate the platform with real shipments before paying anything.

Is a subscription required?

You start with a free trial (no credit card needed). Once your trial quota is used, you purchase a prepaid PKR plan. Plans are available at trackkaro.pk. There is no monthly subscription lock-in — you buy credit when you need it.

Which couriers are supported?

PostEx, TCS, Leopards Courier, CallCourier, Sonic/Trax, and Daewoo FastEx. More couriers are added based on demand — contact support if yours is missing.

Do I need to add my own courier API credentials?

Not necessarily. TrackKaro maintains central API credentials for most couriers, which your store can use out of the box. If you have your own API keys (e.g. a dedicated PostEx or Leopards account), you can add them in your TrackKaro dashboard for direct access.

Will this slow down my store?

No. The plugin loads only on admin pages and offloads all tracking work to WP-Cron background jobs. There is zero impact on your storefront or checkout speed.

What is the branded tracking page?

When a customer clicks the tracking link in their order email, they land on a page on your own domain (e.g. yourstore.com/track-your-order/) that shows the full delivery timeline in your store’s branding. TrackKaro automatically creates this page on plugin activation.

Can I create courier bookings through the plugin?

Yes — for PostEx and Leopards Courier. Open the WooCommerce order, fill in the parcel details, and submit the booking directly from the order screen. The booking reference is saved to the order automatically.

Is it compatible with HPOS (High-Performance Order Storage)?

Yes. TrackKaro is fully compatible with WooCommerce’s High-Performance Order Storage (custom order tables) and has been tested with WooCommerce 5.0 through 9.x.

My tracking status isn’t updating — what do I check?

  1. Confirm WP-Cron is running (check Tools Scheduled Actions or use a cron monitoring plugin).
  2. Check your quota in WooCommerce TrackKaro Settings — if you’ve used your plan’s allowance, new syncs are paused.
  3. Visit your TrackKaro dashboard for detailed tracking logs and diagnostic tools.

Where can I get support?

Open a ticket at trackkaro.pk/panel/tickets or email support@dango.pk .

Reviews

There are no reviews for this plugin.

Contributors & Developers

“TrackKaro Pakistan – Courier Tracking & COD” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.0.45

  • Added: A “Mark as Dispatched” checkbox on the Generate Courier Order (COD) form — when ticked, the order moves to “Dispatched” the moment the courier booking is created and the customer is notified. The choice is remembered per-admin (sticky): your last selection becomes the default on the next order, so you set it once.
  • Changed: The previous behind-the-scenes “Mark as Dispatched on COD Order Creation” option was replaced by this per-order checkbox, giving you control on each booking instead of one global toggle. The box is ticked by default (matching the manual tracking entry); untick it on any order and that preference is remembered for next time.

1.0.44

  • Compliance: Every register_setting() now passes a literal, type-specific sanitize_callback (no callback held in a variable), and the Sync Interval select uses a dedicated method that allowlists its four known values — so each field’s sanitizer is statically verifiable.
  • Fixed: Dashboard widget “Open TrackKaro Panel” link now correctly points to trackkaro.pk/panel (was /panel/dashboard which gave a 404).
  • Fixed: Dashboard widget active-shipment count now uses a positive IN list of known in-progress statuses so orders submitted but never synced (empty status) are no longer counted as active.
  • Fixed: Dashboard widget transient is now cleared on plugin upgrade and after each status sync so stale counts are not shown after updating.
  • Added: “Remove all data on uninstall” setting (Settings Features). Off by default — opt-in to permanently delete all tracking meta from orders on uninstall.
  • Server: When a courier API definitively reports a tracking number not found, the error message is now preserved and shown in the admin viewer instead of being overwritten by the generic “No tracking method available” message.

1.0.43

  • Compliance: register_setting() now uses a direct, type-specific sanitize_callback for every field (sanitize_text_field, sanitize_email, sanitize_checkbox, sanitize_select) instead of a shared dispatcher, so the correct sanitizer per field is statically verifiable. The remaining inline-closure callback on the debug-mode option was also replaced with a named method.
  • Fixed: Removed a duplicate plugin header file that caused two plugins of the same name to register on install. The plugin now ships a single main file (dango-trackkar.php) under the dango-trackkar slug.

1.0.42

  • Rebranded: Domain changed to trackkaro.pk and product name updated to TrackKaro throughout plugin UI, settings, links, and external service references.

1.0.41

  • Improved: Beta couriers now show a dimmed “beta” tag next to their name in the admin couriers list.
  • Improved: “Custom / Other Courier” now shows a “Manual tracking only” note in the order metabox when selected — makes clear no live status updates will occur.

1.0.40

  • Fixed: “Open TrackKaro Panel” link in the WP dashboard widget now correctly points to trackkaro.pk/panel/dashboard (was referencing a removed option and resolving to an invalid URL).

1.0.39

  • Compliance: Replaced the two remaining inline <script> blocks (proactive quota notice + trust badge dialog) with properly enqueued scripts via wp_add_inline_script(); the trust badge dialog now enqueues jQuery UI dialog through the WordPress script API.
  • Compliance: register_setting() now uses a named sanitize callback (sanitize_setting) so the sanitizer is statically recognizable; per-field type-specific sanitization is preserved.
  • Compliance: Hardened input handling — AJAX tracking/courier fields now pass through WP core sanitizers (sanitize_text_field / sanitize_key) before custom sanitizers, and bulk-action notice GET reads are unslashed before sanitizing.
  • Fixed: The first-run trust badge dialog now updates the Features checkbox on the settings page immediately after you choose, so the saved value is reflected without a refresh and cannot be accidentally reverted by a subsequent Save.

1.0.38

  • Improved: TrackKaro metabox action buttons redesigned as equal-weight compact pills matching the height of the status badge. Labels shortened to Refresh / ePOD / Restart.

1.0.37

  • Improved: TrackKaro metabox action buttons redesigned — “Refresh Status” is now a full-width primary button; “Get ePOD” and “Reactivate” appear as a compact secondary row below it.

1.0.36

  • Fixed: “View details on TrackKaro” button in customer tracking shortcode is now centred in the card footer.
  • Fixed: Trust Badge setting checkbox now appears in the Features section of the plugin settings page with the correct checked/unchecked state.
  • Fixed: Green “TrackKaro is connected and active” banner on settings page is now a compact single-line strip instead of a full-height box.

1.0.35

  • Changed: Customer tracking shortcode footer button now links to “View details on TrackKaro” for all couriers instead of “View on [Courier] website”. The tracking number in the status header still links directly to the courier’s portal. Applies to PostEx, TCS, Leopards, CallCourier, Sonic, Daewoo, and all future couriers.

1.0.34

  • Added: First-run opt-in dialog on the TrackKaro Settings page asks whether to display the “Tracking by TrackKaro Pakistan” trust badge on the customer tracking page (recommended for customer confidence). One-time prompt; choice saved immediately. Addresses WordPress.org attribution guideline.
  • Changed: “Trust Badge” replaces the old “Powered by” wording — the badge now reads “Tracking by TrackKaro Pakistan” and is disabled by default. Enable under TrackKaro Settings Feature Settings.
  • Changed: Code comment in tracking submission updated to clearly describe serviceware architecture — only the comment changed, tracking submission behaviour is unchanged (server confirmation is still required before order meta is written). Addresses WordPress.org Guideline §6 (Serviceware) language concern.
  • Improved: Settings fields now use type-specific sanitization callbacks — checkboxes validate yes/no, selects validate against the allowed option list, text fields use sanitize_text_field(). Addresses WordPress.org Plugin Check sanitization requirement.

1.0.33

  • Fixed: Test Connection now works after v1.0.32 removed the Server URL field — PHP falls back to the hardcoded endpoint instead of returning “Server URL is required”.
  • Fixed: Quota warning notice no longer shows “Critical — plan expires in 0 day(s)” for free-plan stores; expiry-based alerts are skipped for free plan types.
  • Fixed: Billing URL in quota notice was built from a removed WP option — now uses the correct hardcoded TrackKaro URL.
  • Improved: Quota API responses are now logged (WP debug log) so unexpected data is visible without needing server log access.

1.0.32

  • Fixed: JS global variables renamed to dangoTrackkarAdmin / dangoTrackkarFrontend to satisfy WordPress.org unique-prefix requirement.
  • Fixed: All echoed variables now use proper WP escaping functions (esc_html()).
  • Fixed: Sanitization chain updated to use WordPress built-in functions (sanitize_key(), sanitize_text_field()) before custom sanitizers, satisfying Plugin Check.
  • Fixed: Settings hint URL updated to the official service domain.
  • Added: Governing Law section to Terms of Service; Cookies and Session section to Privacy Policy.

1.0.31

  • Fixed: Fatal error “Cannot use object of type WP_Error as array” on order screens when TrackKaro server returns 401 for courier capabilities fetch. get_courier_capabilities() now guards against WP_Error and falls back to all-enabled (buttons visible) on any server error. Short 5-min retry TTL on failure instead of 24-hr cache.
  • Fixed: CourierApiController now accepts X-TK-Token header (plugin standard) in addition to the legacy X-Api-Token, so GET /api/v1/couriers returns 200 instead of 401.
  • Fixed: CourierApiController falls back to base query if migration 051 (enable_airway_bill/enable_load_sheet columns) has not been applied yet.

1.0.30

  • Added: “Download Load Sheet” button in COD order box for PostEx and Leopards shipments.
  • Added: Admin per-courier settings to enable/disable Airway Bill and Load Sheet download buttons (TrackKaro server admin panel).
  • Added: ePOD (electronic proof of delivery / signature) button in order tracking metabox for Leopards delivered shipments. Signature URL cached in order meta after first fetch — subsequent views show a direct link.
  • Added: Dashboard widget now computes delivery rate and stats locally from WooCommerce order meta — no TrackKaro server call required.
  • Added: AWB, Load Sheet, and ePOD action buttons in TrackKaro server panel tracking list (/panel/tracking) and admin monitoring view.
  • Added: generic API GET method (Dango_TrackKar_API::get()) for couriers list and ePOD endpoint calls.

1.0.29

  • Fixed: Log timestamps now show local (admin-configured) timezone alongside UTC WooCommerce header.
  • Fixed: COD amount field now correctly sends 0 when intentionally set to zero; previous guard silently substituted order total.
  • Added: Leopards “View on Leopards” tracking portal link in COD order box.

1.0.28

  • Internal release.

1.0.27

  • Internal release.

1.0.26

  • Fixed: Leopards shipper name/phone/address now correctly attached to bookings. Previously the literal string “self” was sent causing blank shipper fields in the Leopards portal. Now shipment_id is sent when a shipper is selected; when no shipper is selected all shipment fields are omitted so Leopards uses account defaults.
  • Fixed: Area field no longer auto-loads and disappears on city selection. Area is now fully on-demand — a “Load areas” link appears and the dropdown only loads when clicked.
  • Area cache extended to 30-day transient (same as cities and shippers).
  • PHPCS: suppressed direct-DB-query warnings for bulk transient deletion (no WP API alternative).

1.0.25

  • Fixed: Leopards shippers list was never cached (empty-city cache key was silently skipped). Shippers now cache for 30 days like cities.
  • Fixed: Shippers dropdown now shows “Use account defaults” when no shippers are returned instead of appearing blank.
  • Added diagnostic logging for Leopards getAllShippers API call — failures now appear in the tracking log with the raw response.

1.0.24

  • Leopards Courier: complete booking form — Division, Origin City, Shippers, Area, No of Items, extra phone fields, Return Address.
  • Leopards Courier: Airway Bill (slip) download added to the order screen after booking.
  • Cache refresh on plugin update: cities, areas, and shipper caches are cleared automatically on each version upgrade.
  • Fixed submission error when no shipper is selected (empty shipper fields now correctly default to account settings).
  • Fixed area dropdown visibility logic; area row now appears only when areas load successfully.
  • Postal Code field removed from COD booking form.

1.0.23

  • Leopards Courier: searchable Origin City dropdown (before Shippers), Shippers dropdown (optional), Area dropdown (30-day cache).
  • Special Instructions pre-filled with “Handle with care” (editable).
  • Weight field defaults to 450 g for Leopards shipments.
  • Dimensions field removed; Postal Code field removed.
  • Shippers default option set to “Use account defaults” — order creation works even without selecting a shipper.

1.0.22

  • PostEx and Leopards COD booking forms now use separate field sets — PostEx fields are hidden for Leopards orders and vice versa.
  • Leopards: weight in grams (vs PostEx kg), Division (Express / Logistics), Shipment Type (Overnight / Economy) fields added.
  • City list for Leopards cached for 30 days (same as PostEx); cache is shared and keyed per courier.

1.0.21

  • Plugin version option stored on activation for future cache-clear-on-update logic.

1.0.20

  • Leopards Courier city list now cached for 30 days to reduce API calls.
  • Airway Bill print button added to order screen for PostEx bookings.

1.0.19

  • Leopards tracking URL updated to new merchant portal (old URLs returned 404).
  • Leopards: direct tracking URL with TN now available — no more manual lookup required.
  • Stability improvements for push/webhook status updates.

1.1.0

  • Added Daewoo FastEx courier support.
  • Leopards: real-time Push/webhook support — statuses update instantly, no polling lag.
  • Trial plan system: new accounts automatically receive a free trial on signup.
  • Paybost payment gateway (PKR billing) with HMAC-SHA256 signature verification.
  • Manual-only tracking mode: couriers can be set to manual status updates only.
  • Improved error messages when courier credentials are missing or invalid.
  • Log Search: filter audit logs and file logs from the admin panel.
  • Various stability and settings-persistence fixes.

1.0.0

  • Initial release.
  • Tracking number management on WooCommerce orders.
  • Courier order creation for PostEx and Leopards.
  • Bulk CSV tracking import.
  • Auto-complete orders on delivery.
  • Dashboard usage widget.