The app is named Cuba-Cell (with double "L") to avoid any legal conflicts or trademark issues with Cubacel.
An iPhone app to quickly access the USSD service codes of ETECSA (Cubacel) : check your balance, buy data/voice/SMS plans, transfer credit and more β all from a clean, organized list that hands the code straight to the system dialer.
Warning
This is an independent, community-made app. It is not affiliated with, endorsed by, or sponsored by ETECSA.
Codes may change at any time at the carrier's discretion.
- π Full USSD Catalog β Organized by categories (Balance & Plans, Purchases, Transfers, Utilities) with input-aware prompts.
- π One-Tap Dialing β Instant execution opening the native system dialer with
#properly encoded. - π€ Contact Integration β Access device address book to call, transfer credit, or place
*99collect calls directly. - π Caller ID Extension β CallKit extension labeling incoming
*99collect calls with the contact's real name. - π Wi-Fi & Navigation Directory β Offline search for ETECSA navigation rooms and public Wi-Fi hotspots by province.
- βοΈ SMS Services Catalog β Browse and prefill SMS service queries (news, weather, sports, utility rates) without silent sending.
- πΆ Internet Speed Test β Built-in ping, download, and upload speed test gauge powered by Cloudflare endpoints.
- π₯ Account & PIN Management β Store transfer PIN in Keychain and manage Plan Amigo numbers easily.
- π Local Reminders β Schedule recurring alerts for plan purchases, balance top-ups, or transfers with 1-tap dial action.
- ποΈ Siri & Voice Shortcuts β Execute balance queries, quick codes, and collect (
*99/ 99) or anonymous (#31#/ oculto / privado) calls via native voice commands usingAppIntents. - π Customization & Settings β Light/Dark theme support, custom accent color picker, and configurable launch tab.
- Online Phone Directory Search β Web scraper backend integration for online phone number lookups. See #2 for details.
- Yellow Pages Integration β Web scraper backend integration to search ETECSA Yellow Pages by category, number, municipality, and province. See #3 for details.
- π Xcode 15+
- π± iOS 17.0+
- βοΈ XcodeGen (
brew install xcodegen)
git clone https://github.com/albertolicea00/cubacell-connect.git
cd cubacell-connect
xcodegen generate
open CubaCellConnect.xcodeprojNote on XcodeGen: This project uses XcodeGen with a
project.ymlspecification to generateCubaCellConnect.xcodeprojdynamically and prevent.pbxprojmerge conflicts.
Build and run on a device. USSD dialing requires a physical iPhone with a Cubacel SIM π² β the simulator cannot place calls.
To get Caller ID working for *99 collect calls, after installing the app go to Ajustes (Settings) βΊ TelΓ©fono βΊ Bloqueo e IdentificaciΓ³n de Llamadas on the device and enable CallerID. This is a one-time, manual iOS setting β no app can enable it automatically. See ARCHITECTURE.md Β§ 11 for why.
CubaCellConnect/
βββ CubaCellConnectApp.swift # App entry point
βββ Models.swift # USSDCode, USSDCategory, catalog decoding, brand palette, Reminder/ReminderTemplate
βββ Services.swift # JSON catalog store, Contacts, system dialer bridge, ReminderManager (local notifications)
βββ UIComponents.swift # Reusable presentational views (code row)
βββ Views.swift # Home, Contactos, category, and settings screens
βββ codes.json # Bundled USSD code catalog
βββ wifi_navigation_rooms.json # Bundled ETECSA navigation-room/hotspot directory
CallerIDExtension/ # CallKit Call Directory Extension (labels *99 collect calls)
βββ CallDirectoryHandler.swift
Shared/ # Code shared by the app and CallerIDExtension
βββ CallerIDStore.swift # App Groupβbacked caller-ID list (read/write)
The full USSD code catalog is dynamically loaded from our JSON configuration file CubaCellConnect/codes.json, keeping the app lightweight and easy to update. π
Free query codes dial immediately. Paid purchase codes stop at ETECSA's confirmation menu by default; an optional AcciΓ³n RΓ‘pida sin ConfirmaciΓ³n setting enables auto-confirming code variants with a visible UI safety warning.
Provides local (user-imported database) and online web search options under Ajustes βΊ Utilidades. For privacy, search is strictly number-only (no name lookup), and results copy to clipboard rather than auto-dialing.
Includes an offline directory of official ETECSA navigation rooms and public Wi-Fi hotspots by province (wifi-rooms-sync-check action monitors source data drift).
-
Directory database not integrated with Caller ID (
*99). The directory database (see above) is intentionally kept separate fromCallerIDStore/CallDirectoryHandler(see ARCHITECTURE.md Β§ 11), which only ever loads from the device's own Contacts. A CallKit Call Directory Extension has a hard cap on how many identification entries it can register (historically on the order of 100kβ200k) β the directory dump has millions of rows (v1: ~4.6M; v2: ~4.8M combined), so registering it wholesale would get the extension rejected/disabled by iOS. Feeding it in would need a drastic filter (e.g. only numbers already in the device's own contacts, which is exactly what happens today) to fit under that ceiling. -
No "call via WhatsApp/Teams" option in Contactos. The Contactos tab only offers cellular actions (normal call,
*99collect,#31#anonymous) next to each contact β it can't add a "call via WhatsApp" or "call via Teams" option alongside them. Those apps place calls over their own proprietary VoIP/Wi-Fi-calling stack, not the cellular network, and don't expose any public API or URL scheme a third-party app can use to trigger a call through them β that's entirely up to WhatsApp/Teams themselves (they'd need to register their own CallKit provider and/or an app-specific integration), not something CubaCellConnect can add from the outside. -
iOS security sandbox and USSD limitations (no real-time balance tracking). Unlike Android (where apps can intercept USSD responses in the background), iOS sandbox security prevents third-party apps from reading or parsing USSD response dialogs, chaining sessions automatically, or running background USSD queries. Because of this system limitation, the app cannot automatically display or update your balance, data packages, or bonus balances in real-time inside the app UI; dialing a code (
tel://) hands off execution to the native Phone app where the user sees the carrier response screen directly. -
No Home Screen widget. Considered and deliberately not built. A WidgetKit extension cannot call
UIApplication.shared.open/tel://at all βAPPLICATION_EXTENSION_API_ONLYmakes that API unavailable in any app extension, widgets included, so a widget can never dial a code or place a*99/#31#call by itself. The only thing a widget could do is open the app via a deep link and let the app dial from there β but that adds a screen transition on top of what unlocking the phone and tapping the app icon already does, with no code actually reaching the dialer any faster. Not worth the extra target, App Group, and maintenance surface for zero real shortcut. -
Physical dual-SIM (two nano-SIM) devices. iPhone models sold in mainland China, Hong Kong, and Macao support two physical nano-SIMs, instead of the nano-SIM + eSIM combo sold everywhere else. This app has no line-selection UI and no way to force a dial through one SIM specifically β iOS gives apps no public API to pick which line places a
tel:///USSD call; it always goes out through whichever line the device's own Phone settings mark as default. Acknowledged, not implemented. -
No iPad / iPadOS support for USSD. Even though Cellular iPad models exist (with physical SIM or eSIM slots), Apple completely blocks USSD code execution on iPadOS. iPadOS lacks a full Phone dialer application, which means users cannot dial USSD codes (such as
*222#,*133#, or*234#), triggertel://*222%23URLs from third-party apps, or receive USSD network responses. -
No Apple Watch / watchOS support for USSD. Similarly, Cellular Apple Watch models do not support USSD code execution or third-party USSD dialing via watchOS.
See CONTRIBUTING.md. Please follow the Code of Conduct.
β οΈ Issues, PR descriptions, and commit messages must be written in English. The app UI is intentionally in Spanish β it targets Cuban users. All technical communication follows English conventions.
The codes were saved from the following sites:
- https://galixpay.com/recargas-a-cuba/
- https://www.fonoma.com/blog/codigos-ussd-cuba
- https://www.etecsa.cu/es/taxonomy/term/1445
- https://www.etecsa.cu/en/rooms-public-spaces
- https://www.ecured.cu/Entumovil
- https://www.escambray.cu/2017/etecsa-informa-sobre-nuevos-servicios-de-telefonia-movil-para-clientes-prepago-infografia/
- https://www.entumovil.cu/#:~:text=Para%20activar%20las%20siguientes%20prestaciones%2C,portal%20el%20de%20su%20preferencia.
Developed by @albertolicea00