ad_spy_ad_get_hooks
ChatGPTReturns what Sellify has already worked out about one ad: its hook, headline, angle, target persona, desire, emotion and selling point, plus the opening spoken words and on-screen text when available. Costs no credits. Free. Use this when the user asks what hook or angle a specific ad uses. When analyzed is false, Sellify has not broken this ad down yet; for a video ad, offer to transcribe or analyze it instead, which costs credits. Cost: Free.
ad_spy_ads_aggregate
ChatGPTSummarizes Sellify's archived ads for a keyword or brand by format, call-to-action, run length, launch month, and topBrands. Use topBrands for which brands run the most ads in a keyword or niche; it ranks Facebook pages, so one brand may appear more than once. ACTIVE includes only running ads. Variations count once as creative groups. For one brand's live total, use adSpy.brand.getOverview activeAdCount. Archive counts can differ from Discovery's live Meta count. Costs no credits. Free. Use this when the user wants the shape of a market or a brand rather than individual ads: which formats dominate, which buttons advertisers use, how many ads run past 30 or 90 days (a sign they work), and whether launches are rising. Long-running ads are the strongest signal of a winning ad. Cost: Free.
ad_spy_ads_count
ChatGPTCounts the ads Sellify already holds for a keyword or one brand, without searching Meta. Returns how many there are, how many are still running, when the newest one was last seen, and when the keyword was last refreshed. Both counts are creative groups (ad variations count once), not individual ads; for how many ads one brand is running now, use adSpy.brand.getOverview activeAdCount. Costs no credits. Free. Call this before a paid Ad Spy search when the user asks how many ads exist, how fresh the data is, or whether a search is worth running. Report adCount and newestAdSeenAt as the real numbers. When searchLikelyFree is true, the Ad Spy search for the same keyword will most likely be answered from stored ads without spending credits. adCount 0 means Sellify holds nothing yet; a paid search may still find ads. Cost: Free.
ad_spy_ads_search
ChatGPTGeneral Ad Spy search for a keyword, product, or advertiser name. Needs no brand page ID. Prefers held-brand, cache, and local archive results before any bounded live provider search. totalCount is a keyword match count across all advertisers, never the running ad count of one brand; for that, resolve the brand page ID and use activeAdCount from adSpy.brand.getOverview. The returned ads are one page of samples: never count or tally brands, totals or rankings from them; for which brands run the most ads, use topBrands from adSpy.ads.aggregate. When totalCountIsLowerBound is true, Meta capped at least one count at 50,000, so totalCount is only a lower bound: report it as more than totalCount rounded down (50,001 is more than 50,000), never as an exact count. Optionally pass a unique idempotency_key per intended call; retrying the same call with the same key charges its credits once. Cost: 0.45 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit.
ad_spy_ads_top_hooks
ChatGPTRanks the opening hooks most reused across brands in the ads Sellify holds for a keyword, product or niche, such as which hooks work in cold plunge ads. Each hook shows how many ads used it, how many brands, its longest run in days, and one example ad. For one named brand's hooks, use adSpy.brand.getResearch instead: its numbers match the Brand page. Costs no credits. Free. Use this when the user asks which hooks, opening lines or angles work in a niche or across brands. A hook reused across many ads, or one that has run for a long time, is a proven hook. Only ads Sellify has already analyzed have a hook, so report adsWithHookCount out of matchedAdCount. Pass sampleAdArchiveId to the per-ad hook tool for the full breakdown of an example. Cost: Free.
ad_spy_advertisers_find_by_domain
ChatGPTFinds the brand pages whose stored ads send people to a website domain or store URL, including its subdomains. Returns each brand page ID, name and ad counts. Costs no credits. Free. Use this when the user gives a website or store URL instead of a brand name, or asks who advertises a site. Pass the pageId from a result to the brand tools for that brand. An empty list means Sellify holds no ads pointing at that domain yet; then search Ad Spy brands by name. Cost: Free.
ad_spy_board_resolve
ChatGPTLists Ad Spy saved-ad boards in the current workspace. Use query to resolve a user-named Ad Spy board before creating one. These are distinct from Ecom generated-ad library folders. Cost: Free.
ad_spy_board_resolve_ads
ChatGPTReturns a bounded, tenant-scoped list of ads from one exact Ad Spy board and deterministic resolution status. Use the exact board id from listAdSpyBoards. For the oldest or newest ad, set sort; never put ordering words in query. With sort and no query, savedAds[0] is the answer (not_found means the board has no ads); an ambiguous resolution then only means the board has more ads, so do not ask the user to choose. Cost: Free.
ad_spy_brand_ads_search
ChatGPTLists ads for one verified Ad Spy brand, identified by its page ID and name from an Ad Spy brand search. Use for what/which/show/list requests; use adSpy.brand.getOverview for counts. Prefers cache/archive before a bounded live provider search. totalCount depends on servedFrom: archive results count creative groups (ad variations collapsed), not ads; provider results report the Meta Ad Library match count, which with status ACTIVE, timeWindow all and no country is the active ad count for the brand, and is null for windowed searches. When totalCountIsLowerBound is true, Meta capped at least one count at 50,000, so totalCount is only a lower bound: report it as more than totalCount rounded down (50,001 is more than 50,000), never as an exact count. Optionally pass a unique idempotency_key per intended call; retrying the same call with the same key charges its credits once. Cost: 2.4 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit.
ad_spy_brand_get_intelligence
ChatGPTReads the stored top landing pages and popular hooks for one verified Ad Spy brand. pending reports whether background enrichment is still running; this action does not make a live provider call. Cost: Free.
ad_spy_brand_get_landing_page_ads
ChatGPTReads a bounded page of active stored ads that send traffic to an exact landing-page normalizedUrl supplied by the user, returned by adSpy.brand.getOverview, or returned as row.key by the landing section of adSpy.brand.getResearch. Prefer the normalizedUrl or research row.key; the action also normalizes a research row.url display URL before lookup. Use this action instead of adSpy.brand.getResearchAds for exact landing-page URL requests. The response contains compact ad summaries and does not run a live provider search. Cost: Free.
ad_spy_brand_get_overview
ChatGPTReads the stored overview for one verified Ad Spy brand. It returns statistics, but no ad examples. Use for explicit count or overview requests; use adSpy.brandAds.search for what/which/show/list requests. activeAdCount answers how many ads the brand is running now and is never limited by timeWindow: it is Sellify's ad archive count of the brand's active ads as of activeAdCountAsOf, summed across every page of the brand (its brand group), the same number as the Following page and adSpy.followedBrands.list; null means Sellify has no running count for the brand right now. Every other field, including coverageCount, mediaMix, newAdsLast30d, landing pages and niche, covers the requested page only. coverageCount counts active archived ads of that page that started within timeWindow; never report it as the running total or compare it with activeAdCount. pageId must be the page ID an Ad Spy brand search returned for this brand; never guess it. Pass a returned normalizedUrl verbatim to adSpy.brand.getLandingPageAds. This is an archive/cache read and does not run a live ad-provider search. Cost: Free.
ad_spy_brand_get_research
ChatGPTReads bounded research rollups for one verified brand: hooks, copy, headlines, landing pages, personas, angles, USPs, desires, emotions and themes. Use it when the user asks which hooks, copy, headlines, angles, personas or landing pages a named brand uses most, or in how many ads. The numbers match the Brand page for that page ID: ads live in the window, ended ones included, and variations of one ad count once. Pass a returned section and row key verbatim to adSpy.brand.getResearchAds. Rows can be ranked by ad count or longest-running-days, the available durability proxy. representativeAdId is the longest-running ad in the row, so its start date matches longestDays. Each row share of ads is adCount divided by the basisAds of its section. Cost: Free.
ad_spy_brand_get_research_ads
ChatGPTReads a bounded page of stored ads matching an exact research section and row key returned by adSpy.brand.getResearch. The response contains compact ad summaries rather than raw provider payloads and does not run a live provider search. Cost: Free.
ad_spy_brand_get_stats
ChatGPTReads stored aggregate stats for one brand followed by this workspace, including active ads, trend, media mix and landing-page counts. activeAdsCount is the last checked Meta Ad Library active count (may be a lower bound) and may differ from adSpy.brand.getOverview activeAdCount; monthlyActive counts ads active at any point in each month. If enrichment is pending, retry later; this action does not make a live provider call. Cost: Free.
ad_spy_brand_status
ChatGPTReports, for each exact brand page ID, whether this workspace follows it, the state of its latest ads collection request (collecting or collected, collected with no ads, failed, or not requested), whether Ad Spy already has archived ads for it, and whether its brand stats are ready. Use it to report the outcome of a brand ads request or a batch follow. Cost: Free.
ad_spy_brands_search
ChatGPTResolves an advertiser name to verified Ad Spy brand records and page IDs. Returns brands, not ads. Optionally pass a unique idempotency_key per intended call; retrying the same call with the same key charges its credits once. Cost: 0.15 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit.
ad_spy_filter_preset_list
ChatGPTLists the saved Ad Spy filter presets in this workspace in one call, newest 50 first, and sets truncated when there are more; pass pageType only to narrow to one page type. Each preset has the exact id needed to update, delete or make it the default. canEdit says whether the current user may update or delete it; any member can make a preset the default. Cost: Free.
ad_spy_followed_brands_digest_get
ChatGPTReports how often the current user gets the email digest of new ads from brands this workspace follows: off, daily or weekly. The digest is sent by email to the current user only. followedBrandCount 0 means the digest has nothing to report until the workspace follows a brand. Cost: Free.
ad_spy_followed_brands_list
ChatGPTLists the brands this workspace follows in Ad Spy, one item per brand exactly as the Following page shows them, so you can answer "which brands am I following", "how many brands do I follow" or "how many live ads does each brand I follow have". A brand with several Facebook pages is one item named after the brand, with its followed pages under pages and activeAdCount summed across them; never list those pages as separate brands. Order is newest follow first unless sort is activeAdCount. It reads stored Ad Spy data for free. activeAdCount is the live count shown on the Following page from Sellify's ad archive, activeAdCountSource is archive, and activeAdCountAsOf is the oldest archive sighting among the brand's pages with active ads. A zero count means Sellify holds ads for that brand but none are running; null means Sellify has not collected any of its ads yet. For the running ad count of one named brand, use adSpy.brand.getOverview instead. Results come in pages: pass limit, and while hasMore is true pass nextCursor as cursor, with the same sort, to get the next page. followedBrandCount is the number of brands across all pages, and 0 means the workspace follows no brands yet. Cost: Free.
ad_spy_followed_brands_new_ads
ChatGPTLists the ads that brands this workspace follows launched since a moment you choose, defaulting to the last 24 hours, so you can answer "what's new from brands I follow since yesterday". It reads stored Ad Spy data for free. Returns up to 10 Facebook pages with the newest launches and up to 6 ads each; each entry in brands is one page, and a followed brand with several pages can have several entries, so count brands with followedBrandCount, not with the entries. newAdCount is each page's full count, and since and until give the exact window read. Pages with no new ads are left out, and followedBrandCount 0 means the workspace follows no brands yet. Cost: Free.
ad_spy_product_brand_recommendations_get
ChatGPTReturns stored Ad Spy brand recommendations for one workspace product. Queues a bounded backfill when none exist yet, and retries a failed match with no brands once a few minutes have passed since it failed. Cost: Free.
ad_spy_saved_ads_list
ChatGPTReturns a bounded tenant-scoped list, deterministic resolution status, and exact totalCount and formatCounts for saved Ad Spy ads. Use an exact saved-ad ID, advertiser, or headline query to resolve the source ad. Answer how-many questions from totalCount and formatCounts, never from savedAds length or resolution.candidateCount. With sort and no query, savedAds[0] is the answer (not_found means no saved ads match); an ambiguous resolution then only means more ads exist, so do not ask the user to choose. Cost: Free.
ad_spy_saved_search_list
ChatGPTLists the saved Ad Spy searches in this workspace, newest 50 first, with the exact id needed to run or delete one and the keyword or brand each one searches. canDelete says whether the current user may delete it. Costs no credits. Cost: Free.
ad_spy_saved_search_run
ChatGPTRuns a saved Ad Spy search by its id and returns the same ads a fresh search with its keyword or brand would return. It is charged exactly like that search: often nothing when Sellify already holds fresh ads, otherwise a few credits per results page. When totalCountIsLowerBound is true, Meta capped at least one count at 50,000, so totalCount is only a lower bound: report it as more than totalCount rounded down (50,001 is more than 50,000), never as an exact count. Use this when the user asks to run, rerun or check a search they saved, passing the id from the saved search list. max_credits is the most the run may spend, not what it will cost. Optionally pass a unique idempotency_key per intended call; retrying the same call with the same key charges its credits once. Cost: 2.4 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit.
ad_spy_video_get_status
ChatGPTChecks an Ad Spy video job (a transcript, a scene-by-scene analysis, or similar scripts) and returns its result when it is ready. While the status is pending or processing, wait a few seconds and call this again. When it fails, tell the user why and stop polling. Missing means the job was never started for this ad.
create_file_upload
ChatGPTStarts a file upload when the file cannot be passed to a tool directly, for example a photo or document the user attached in Claude, or a file saved on their computer or phone. Call it as soon as the user mentions such a file, without first asking them to attach it in chat, and share upload_page_url with them. Returns an upload page link for the user, and an upload URL you can PUT the file to yourself when you pass mime_type and size_bytes. In ChatGPT, pass the attached file straight to the tool that needs it instead. For a file already on a public website, pass its url to the tool that needs it instead. Cost: Free.
ecom_board_create
ChatGPTCreates a board in the Ecom Ad Suite library for organizing generated ads. Pass parentId to create a sub-board one level under an existing top-level board. Board names must be unique among siblings, so repeating the same create reports a conflict instead of creating a duplicate. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_board_delete
ChatGPTDeletes a board together with its sub-boards and removes every ad membership in them. The ads themselves stay in the library, but the board cannot be restored. Pass the board's exact current name as expectedName; the delete is refused if the id belongs to a different board. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_board_list
ChatGPTLists active library boards. parentId identifies sub-boards, sharing is exposed as a boolean, and share tokens are never returned. Cost: Free.
ecom_board_reorder
ChatGPTSets the display order of top-level boards. Pass every top-level board id exactly once in the desired order; the first id is shown first. A partial list is rejected. Sub-boards cannot be reordered. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_board_set_sharing
ChatGPTTurns public sharing on or off for a board of generated ads. With shared true it returns the board's share link, which anyone can open without signing in; if the board is already shared (isShared is true for it in the board list), the existing link is returned unchanged. With shared false the existing link stops working, and repeating it reports success. Pass the board's exact current name as expectedName; the change is refused if the id belongs to a different board. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_board_update
ChatGPTChanges the name, the color, or both of a board of generated ads in one step. When changing the name, pass the board's current name as expectedName so the change is refused if the id belongs to a different board; a color-only change does not need it. The new name must be unique among boards under the same parent. Repeating the update converges on the same state. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_brand_kit_get
ChatGPTGets the workspace brand kit: logo, up to three brand colours, heading and body fonts, and a one-line voice. kit is null when the workspace has none yet. Image ads use the brand kit by default. The logo URL is a signed link that expires after one hour. Cost: Free.
ecom_generation_get_status
ChatGPTChecks a background job: an edit or background removal on an ad image, a sales-angle or hook generation, or a hero-image generation. While its status is pending or processing, wait a few seconds and call this again. It does not check new image-ad generations, which have their own status tool.
ecom_hero_image_bulk_delete
ChatGPTRemoves one or more selected hero images from a product and durably queues their stored blobs for reference-safe deletion. Missing images are no-ops that still retry queued cleanup. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_hero_image_bulk_remove_backgrounds
ChatGPTRemoves backgrounds from one or more selected product hero images and reports exact affected, succeeded, failed, and skipped counts. When the user asks for all or every hero image, always call product.get first, even when an earlier product.get result is already in the conversation. Then call this tool once with every hero image from that fresh result, including images added since the earlier read. Do not filter out images whose backgrounds were already removed because this tool skips them at no charge. Only delivered cutouts are charged. Read the product first: its hero images carry the ids and show whether each background is already removed. The cutout replaces the hero image in place and runs before this call returns, which can take up to two minutes for many images. If the call times out, read the product again before retrying: images still being processed are reported as skipped. Cost: 0.05–1 credits, depending on the requested quantity and options. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_hero_image_generate
ChatGPTQueues hero image generation for a product and returns the submission id to poll. Charges hero image credits when the work completes. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 14–56 credits, depending on the requested quantity and options. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_hero_image_keep
ChatGPTAccepts a generated hero image that is pending review. Repeating the action converges on the same kept image. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_hero_image_pull_from_urls
ChatGPTFinds safe image candidates on the selected product’s saved URLs, downloads them, and attaches the accepted images to the product. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_hero_image_set_primary
ChatGPTSets an existing kept hero image as the product primary image. Repeating the selection converges on the same state. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_image_ad_clone
ChatGPTClones an ad from the shared winning ads library, identified by its winningAdId. Resolves or creates a closest-to-winner strategy, queues image generation, and returns the submission id to poll. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 15–80 credits, depending on the requested quantity and options. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_image_ad_clone_from_saved_spy
ChatGPTPrepares a durable clone strategy, queues image generation, and returns the submission id to poll. Pass angleId to write the ad on one of the product’s own sales angles instead; the clone analysis and its charge are then skipped. variationCount sets how many versions to generate, 1 to 5 (default 5), and the image charge is priced by it. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 15–80 credits, depending on the requested quantity and options. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_image_ad_generate_more
ChatGPTValidates the parent and optional source variation, queues more image ads, and returns the submission id to poll. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 15–242 credits, depending on the requested quantity and options. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_image_ad_get_submission_status
ChatGPTReturns progress, failure details, and safe visible results for one Ecom image-ad generation submission. Cost: Free.
ecom_image_ad_regenerate_copy
ChatGPTQueues copy regeneration for all or selected visible variations of a completed generated image ad. Look the ad up in the ad library first, then pass its submissionId, and its variationId in variationIds. The new copy replaces the current headlines, primary text and descriptions, can replace lines the user edited, and cannot be undone. Set replaceEditedFields only when the user asks to replace their own edits too. The new copy is written in the background; list the ad again after a minute to read it. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 0.3 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_image_ad_request_background_removal
ChatGPTRemoves the background from a visible ad image, saves a completed version, and selects it as current. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 0.05 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_image_ad_request_image_edit
ChatGPTCreates a version for a visible ad, queues an AI image edit, and returns the version id to poll. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 14–25 credits, depending on the requested quantity and options. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_image_ad_set_current_version
ChatGPTSelects a completed edit version for a visible ad, or selects the original image when versionId is null. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_image_ad_update_meta_copy
ChatGPTUpdates one primary-text, headline, or description field on a visible generated ad and meters the persisted edit once. Look the ad up in the ad library first. Index 0 is the copy shown in its copyPreview. When copyPreview has primaryTextTruncated, the preview is only the start of the primary text, so replace it only with complete new text from the user and never write back an edited preview. Pass a new random UUID v4 as operationId for each edit, and reuse it only when retrying that same edit; a retry with the same operationId returns the first result without charging again, and reusing one for a different edit is refused. Cost: 0.2 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_library_delete_ads
ChatGPTMoves one or more generated ads to Recently deleted. They disappear from the library, boards, and downloads but can be restored later with their board memberships intact. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_library_get_download_link
ChatGPTReturns a link that downloads image ads as one ZIP file: chosen ads (adRefs), every visible ad from one generation (submissionId), or every ad on one board (boardId), up to 100 ads. Pass exactly one of the three. The link works for 30 minutes, and only for the same Sellify user signed in to the app in their browser. Cost: Free.
ecom_library_hard_delete_ads
ChatGPTPermanently and irreversibly deletes ads that are already in Recently deleted: their images, edit history, board memberships, and Recently deleted entries are removed and cannot be recovered. Resolve the ads with the Recently deleted list tool; ads still in the library are refused. Only call this when the user has explicitly asked for permanent deletion or to empty Recently deleted. Cost: Free. When the user asks for this, call it directly: Sellify asks the user to confirm before anything is deleted. If it returns mcp_confirmation_required, show the user its question and retry with confirmation_token only after they say yes. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_library_list_ads
ChatGPTLists visible generated ads across the workspace or, when boardId is provided, on one active board. Soft-deleted ads are excluded. Cost: Free.
ecom_library_list_deleted_ads
ChatGPTLists ads in Recently deleted, most recently deleted first, with when each was deleted and the total count. These ads are hidden from the library and boards. Use the returned submissionId and variationId to restore them or permanently delete them. Cost: Free.
ecom_library_list_reference_images
ChatGPTLists the reference images this workspace uploaded for image ads and hero images, pinned images first, then most recently used. Each image has a temporary url to view it and a storagePath that identifies it in the app. Cost: Free.
ecom_library_remove_ad_from_board
ChatGPTRemoves one generated ad from one board. The ad stays in the library and on any other boards. Repeating the removal reports success. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_library_restore_ads
ChatGPTRestores one or more ads from Recently deleted back into the library, including their previous board memberships. Only ads currently in Recently deleted are restored: when restoredCount is lower than requestedCount, the other ads were not in Recently deleted and were left unchanged. If a restored ad returns to a publicly shared board, it is visible again to anyone with the board share link. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_library_save_ads_to_boards
ChatGPTAdds one or more generated ads to one or more boards without removing existing memberships. Memberships that already exist are skipped, so repeating the save is safe. If a board is publicly shared, ads added to it are visible to anyone with its share link. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_library_set_ad_boards
ChatGPTSets the exact set of boards a single generated ad belongs to, adding it to the listed boards and removing it from every other board. Read the ad's current boardIds first and include every board it should stay on. Pass an empty boardIds list to remove the ad from all boards. If a board is publicly shared, ads added to it are visible to anyone with its share link. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_create
ChatGPTCreates an Ecom product from reviewed product fields and optional already-uploaded research documents. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_delete
ChatGPTDeletes the selected product, removes its sales-angle links, and cleans up its unreferenced stored files. Repeating the deletion reports success. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_draft_from_url
ChatGPTReads a public product page and drafts product details and candidate hero images. This uses product-from-URL credits but does not save a product; use the product create action after the user reviews the draft. Use this when the user gives a store or product page URL for a product to add. It saves nothing: show the user the drafted name and description, then create the product with the fields they approve. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 4 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_get
ChatGPTGets one workspace product with safe notes, offers, research-document metadata, and displayable hero-image URLs. Hero-image URLs are signed links that expire after one hour. Cost: Free.
ecom_product_import_reviews
ChatGPTReads customer reviews from a product page URL, pasted text or a CSV export, summarizes their pains, outcomes, objections and hook phrases, and saves them as the product's Reviews research document. A new import replaces the previous Reviews document. Angle and hook generation then uses them. Use this when the user wants Sellify to read a product's customer reviews, or wants sales angles or hooks drawn from them. Look the product up first. Pass source kind url with the product's own page (from its urls) unless the user gives another reviews page, or kind text with reviews the user pastes. When the page has no readable reviews, ask the user to paste them. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_list
ChatGPTLists products in the workspace with safe summaries, optional text filtering, and cursor pagination. Cost: Free.
ecom_product_note_manage
ChatGPTAdds, updates, or deletes a note, idea, or to-do on an existing product. create adds one: set type to note, idea, or todo, put the text in body, and pass a unique idempotency_key; a new todo starts not done. update changes a note's body, or for a todo whether it is done; notes and ideas cannot be marked done. delete removes the note, and repeating it reports success. update and delete take the noteId from the product's notes. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_offer_manage
ChatGPTAdds, updates, or deletes a promotional offer on an existing product. create adds one with a label and an optional description; optionally pass a unique idempotency_key so a retry does not add it twice. update changes the offer's label or description without replacing the offer. delete removes the offer, and repeating it reports success. update and delete take the offerId from the product's offers. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_regenerate_description
ChatGPTReads the selected product’s saved URLs and fills only a missing description or emoji. Existing user-written values are never overwritten. Successful page drafts use product-from-URL credits. Use this when a saved product has no description and the user wants Sellify to write one from its product page. It changes nothing when the product already has a description and emoji. To rewrite an existing description, write the new text with the user and save it with the product update tool. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 4 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_research_document_delete
ChatGPTDetaches a research document and deletes its blob when no product references it. An optional document name prevents deleting a stale or mismatched selection. Repeating the deletion reports success. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_product_update
ChatGPTUpdates the selected product name, description, image URL, source URLs, or emoji. Repeating the same update converges on the same product fields. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_sales_angle_create
ChatGPTCreates a manual sales angle and optionally links it to existing products. This write is unmetered and requires approval. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_sales_angle_delete
ChatGPTDeletes a sales angle. Repeating the command reports success after the angle is already absent. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_sales_angle_generate_bulk
ChatGPTQueues an AI sales-angle research batch for a product and returns a submission id to poll. Consumes one angle-generation credit per requested angle. It draws on the product's description, notes and research documents, including any customer reviews imported for it. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 21–70 credits, depending on the requested quantity and options. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_sales_angle_generate_from_brief
ChatGPTUses AI to generate and save one product-linked sales angle from a specific brief. Consumes angle-generation credits. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 7 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_sales_angle_generate_more_hooks
ChatGPTUses AI to generate and append non-duplicate hook variants to a product-specific sales angle. Consumes angle-generation credits when at least one hook is added. Optionally pass a unique idempotency_key per intended write; retrying with the same key returns the first result instead of writing twice. Cost: 7 credits. Uses workspace credits. Pass max_credits, the most this call may spend. The call is refused before any work starts if it can cost more, or if it would take this connection past its daily credit limit. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_sales_angle_get
ChatGPTGets one workspace sales angle with readable strategy fields. Cost: Free.
ecom_sales_angle_list
ChatGPTLists the sales angles linked to one product in deterministic display order with optional text filtering and cursor pagination. Cost: Free.
ecom_sales_angle_reorder
ChatGPTSets the complete display order of the sales angles linked to a product. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_sales_angle_set_winner
ChatGPTMarks or unmarks a product-linked sales angle as a winner. Changes only the winner state. Retry-safe, because repeated calls do not toggle state. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_sales_angle_update
ChatGPTRenames a sales angle or edits its hook, description, status, product links, or pinned state. Does not change winner state. Repeating the same update converges on the same state. Cost: Free. Runs in the workspace this connection is bound to and needs a workspace Owner or Admin.
ecom_winning_ad_list
ChatGPTLists the shared winning ads library, newest first. Filter by query (caption, brand, or source link) or adType. Each returned id is a winningAdId for cloning. Cost: Free.
get_app_link
ChatGPTReturns an app.sellify.ai link to a page or record in the current workspace, so the user can view, compare or finish something in the dashboard. Use it for anything the tools cannot do or that needs a human to confirm: permanently deleting ads happens on the deleted_ads page. Publishing ads to Meta from Sellify is coming soon; for now, link the user's ads (ad_library or generated_ads) so they can download them, and share Meta's upload guide: https://www.facebook.com/business/help/621956575422138
get_credit_balance
ChatGPTFree. Returns the workspace credit balance plus this connection's daily credit limit, usage, remaining allowance, and UTC reset time.
meta_ads_account_list
ChatGPTLists the Meta ad accounts connected to this workspace, whether Meta is connected, when data was last synced, and the metrics and breakdowns the other Meta Ads tools report. Call this first for any question about the user’s own Meta ads, campaigns, spend or results. When connected is false, tell the user to connect Meta in Sellify’s Ads Manager; the other Meta Ads tools will return nothing. Pass accountId to the other tools when the user names one account; pass null to cover all of them. Cost: Free.
meta_ads_ad_list
ChatGPTLists individual Meta ads with their copy, creative thumbnail and performance in a date window, ranked by spend unless another metric is chosen. Marks ads whose image was made in Sellify. Days are each ad account's reporting days. With no dates the window is the last 7 days up to today (UTC). Data comes from Sellify's sync of Meta, so today can be incomplete. Use to find winning or losing ads: sort by roas, cpa or ctr, and ignore ads with little spend before calling one a winner. To explain why an ad wins, compare its headline, primaryText and creative with the others, then break down its ad set by adSetId. sellifyAd matches ads in the Sellify ad library. Pass sellifyOnly true when the user asks how their Sellify ads perform. Rankings across accounts are not converted between currencies. Cost: Free.
meta_ads_ad_set_breakdown_get
ChatGPTSplits one Meta ad set's performance by age, gender, placement and country, ranked by spend. Meta breakdowns cover the last 30 days only. Days are each ad account's reporting days. With no dates the window is the last 7 days up to today (UTC). Data comes from Sellify's sync of Meta, so today can be incomplete. Use to explain who an ad set reaches and where it performs best. Empty lists mean Meta has not reported a breakdown for that window. Cost: Free.
meta_ads_campaign_list
ChatGPTLists Meta campaigns with their status, budget and performance in a date window, ranked by spend unless another metric is chosen. Days are each ad account's reporting days. With no dates the window is the last 7 days up to today (UTC). Data comes from Sellify's sync of Meta, so today can be incomplete. Use for campaign-level comparisons. To see the ads inside one campaign, pass its campaignId to the Meta ad list. Rankings across accounts are not converted between currencies. Cost: Free.
meta_ads_performance_get
ChatGPTReturns Meta ads spend, results, CPA, ROAS and the other metrics for one ad account or all of them, as totals and day by day. Days are each ad account's reporting days. With no dates the window is the last 7 days up to today (UTC). Data comes from Sellify's sync of Meta, so today can be incomplete. Use for account-level questions such as how much was spent this week or whether results are trending up. currency is null when several accounts are totalled; money values are then each account’s own currency added together, so say so. Cost: Free.
search_docs
ChatGPTSearches the Sellify Help Centre for how the product works: credits, plans, creating ads, products and angles, Ad Spy, boards, Meta and Google ads, and workspace settings. Returns each page title, a snippet, its URL and a markdown URL. Set includeContent to get the full page as markdown. Cost: Free.