Tally
Create Tally forms faster with AI. Describe what you need in plain English, and the app generates clear, well-structured questions you can use right away. Perfect for surveys, feedback forms, applications, and registrations, it helps you go from idea to ready-to-build form in seconds while keeping your workflow simple and efficient.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Form & Survey Builders
- Secondary Subcategories
- None listed
- Brand
- Tally
- Access
- Account required
- First tracked
- 2026-08-01
- Tool count
- 25
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is visible.
ChatGPT Plugin Discoverability Score
ChatGPT organic discovery is not live yet
Tally is tracked in the ChatGPT Plugin registry. Public organic-discovery measurement is not live for ChatGPT yet, so there is no score to publish today.
Get notified when your score goes live
Enter your work email and we’ll notify you when ChatGPT Plugin organic discovery scoring launches.
No spam. Unsubscribe any time.
Competing in ChatGPT Form & Survey Builders
View CategoryHow the Discoverability Score works
Organic discovery scoring for Tally on ChatGPT is not live yet. The score will use measured agent conversations when it launches.
Organic discovery scoring is pending. Your Plugin score will appear on this scale when measurement goes live.
FoundDiagnostic
Whether Claude found your Plugin in connector search. It must be Found before it can reach the picker, but the score counts picker appearances—not search results.
PickedMain score
How often your Plugin appeared in the picker, or Claude invoked it directly, across contested conversations. This percentage is the Discoverability Score; the headline number is rounded.
PositionedDiagnostic
What position your Plugin appeared in when it was shown in the picker. This shows prominence, but it does not affect the score.
25 tools agents can invoke
Create or update logic rules using DSL syntax: WHEN <condition> THEN <action>. <uuid_references> All UUIDs come from the ledger. Use the correct column: - **Condition LHS** → questionUuid column - **Condition RHS for choice fields (Dropdown, MultipleChoice, Checkboxes)** → optionBlockUuid (NOT the option text) - **Condition LHS for Matrix** → row blockUuid (MATRIX_ROW) - **Condition RHS for Matrix** → matrix column blockUuid (NOT the option text) - **SHOW/HIDE a full question** → questionUuid column - **SHOW/HIDE a single block (e.g. one option)** → blockUuid column - **REQUIRE** → questionUuid column - **JUMP TO PAGE** → page number column </uuid_references> <conditions> Each condition compares a field to a value, e.g. `<priceUuid> > 100`. Don't apply math to the field, and don't compare two fields to each other (for choice fields, the comparison value can still be an optionBlockUuid). To check a calculated value (like price × qty > 100), store the result as a calc field first and use that: - Choice fields (Dropdown, MultipleChoice): `<questionUuid> IS <optionBlockUuid>` / `IS NOT <optionBlockUuid>` - Text/Email/Link/Phone fields: `<questionUuid> IS "literal text"` / `IS NOT "literal text"` - Empty check (any field): `<questionUuid> IS EMPTY` / `IS NOT EMPTY` - Number/Rating/LinearScale: `<questionUuid> > 5` (any of `> >= < <= = !=`) - Text matching: `<questionUuid> CONTAINS "text"` / `DOES NOT CONTAIN "text"` - Text matching: `<questionUuid> STARTS WITH "text"` / `ENDS WITH "text"` - Text matching: `<questionUuid> DOES NOT START WITH "text"` / `DOES NOT END WITH "text"` - Checkboxes/MultiSelect (arrays): `<questionUuid> IS ANY OF (<blockUuid>,<blockUuid>)` / `IS NOT ANY OF` / `IS EVERY OF` - Checkboxes/MultiSelect: do NOT use IS/IS NOT — use CONTAINS or IS ANY OF instead - Matrix: `<matrixRowBlockUuid> IS <matrixColumnBlockUuid>`; use CONTAINS / IS ANY OF when multiple selection is enabled - Date fields: `<questionUuid> IS BEFORE "2024-01-01"` / `IS AFTER "2024-01-01"` - Combine: `<cond1> AND <cond2>` or `<cond1> OR <cond2>` (parentheses required when mixing) </conditions> <actions> - `SHOW <questionUuid>` / `HIDE <questionUuid>` (comma-separate for multiple) - `SHOW <blockUuid>` / `HIDE <blockUuid>` to target a single block within a question - `REQUIRE <questionUuid>` - `JUMP TO PAGE <pageNumber>` — jump to a specific page (use the page number from the ledger's page column). Check the Page flow section for current page order. - `JUMP TO END` — end the form early (jump to the default thank you page). If a custom thank you page exists, it will target that page instead. - `CALCULATE <calcFieldUuid> = <expression>` — assign a formula expression to a calculated field. See <calculated_fields> below. - `DISABLE SUBMISSION` — hide the submit button so the form can't be submitted while the condition holds (eligibility gate). Takes no target. - Multiple actions: `SHOW <questionUuid>, REQUIRE <questionUuid>` </actions> <calculated_fields> Group calc field writes that share a condition into one rule's THEN clause; only split into separate rules when the conditions differ (e.g., per-event accumulators). - **Target** (left of `=`): the UUID of a calculated field from a `CALCULATED_FIELDS` block. The ledger lists them in the properties column as `<calcFieldUuid>=<name>(<TYPE>)` — use the UUID. Create the block via create_blocks before writing CALCULATE rules. - **Expression** (right of `=`): `+ - * /` for NUMBER, `+` only for TEXT concat. Parens for precedence. Number and string literals allowed. Field refs are bare uuids – questionUuid for inputs, the calc field's own uuid (properties column) for cross-calc / self-reference. No blockUuid, no `{{ }}`, no functions. - **Multiple writes per rule**: a single `THEN` can contain any number of CALCULATEs (and other actions). Comma-separated. - **Sequential evaluation**: CALCULATEs run top-to-bottom — each reads values left by earlier rules. Place dependent CALCULATEs in dependency order (e.g. compute `subtotal` before `tax`), or group them under one THEN to lock the order. - **Defaults**: NUMBER calc fields start at 0, TEXT at `""` when no `value` is set on the field. - **Constants on the field, not in rules**: For values that never change (e.g. `taxRate = 0.21`, `greeting = "Hi "`), set `value` on the calc field at creation time via create_blocks. Don't write a CALCULATE rule whose right-hand side is just a literal — CALCULATE is for expressions with field references. - **Calc fields are never empty** – they always carry the default (0 or `""`). IS [NOT] EMPTY on a calc field is rejected. To gate a calculation on user input completion, use IS NOT EMPTY on the INPUT field driving the calc (not on the calc itself). To check the calc value, use a numeric comparison (`> 0`, `!= 0`) for NUMBER or `IS` / `IS NOT` for TEXT — but only when the default specifically means "not yet answered" (e.g. quiz score), not when 0 / `""` is a legitimate result (e.g. an opt-out fee). - **Self-reference works** — the target can appear in its own expression. Use this for accumulators (quiz scoring, running totals) instead of creating per-question intermediate fields. - **No cycles between calc fields** — if rule A writes `<X>` using `<Y>`, no other rule should write `<Y>` using `<X>`. Cycles produce stale values, not an error. Example patterns (replace `<...Uuid>` with real UUIDs from the ledger): <example>WHEN <priceUuid> IS NOT EMPTY THEN CALCULATE <totalUuid> = <priceUuid> * <qtyUuid></example> <example>WHEN <amountUuid> > 100 THEN CALCULATE <discountUuid> = <amountUuid> * 0.1</example> <example>WHEN <firstUuid> IS NOT EMPTY THEN CALCULATE <greetingUuid> = "Hello " + <firstUuid> + " " + <lastUuid></example> <example> Multi-step under one condition — derive subtotal, tax, and total in a single rule: WHEN <priceUuid> IS NOT EMPTY THEN CALCULATE <subtotalUuid> = <priceUuid> * <qtyUuid>, CALCULATE <taxUuid> = <subtotalUuid> * 0.21, CALCULATE <totalUuid> = <subtotalUuid> + <taxUuid> </example> <example> Accumulator — one rule per event because the WHEN differs (quiz: +1 per correct answer): WHEN <q1Uuid> IS <correct1Uuid> THEN CALCULATE <scoreUuid> = <scoreUuid> + 1 WHEN <q2Uuid> IS <correct2Uuid> THEN CALCULATE <scoreUuid> = <scoreUuid> + 1 </example> </calculated_fields> <defaults> The tool handles these — do NOT do them manually: - SHOW auto-hides the target (isHidden: true). Do NOT call configure_blocks to hide it first. - REQUIRE auto-marks the target optional (isRequired: false). Do NOT call configure_blocks to unset it first. </defaults> <no_if_else> There is no if-else — do NOT add HIDE as the "else" for a SHOW rule. Logic rules are NOT if-else. All SHOW targets start hidden by default. When a SHOW condition is false, the target simply stays hidden — no HIDE needed. <example> WRONG — adds useless HIDE actions: WHEN score <= 6 THEN SHOW feedback, HIDE review WHEN score >= 9 THEN SHOW review, HIDE feedback RIGHT — each rule only SHOWs its target: WHEN score <= 6 THEN SHOW feedback WHEN score >= 9 THEN SHOW review </example> The HIDE in the wrong example is a no-op: - fields that are marked as SHOW are automatically hidden by default - fields that are marked as REQUIRE are automatically optional by default </no_if_else> <verb_matches_user> Match the action to the verb the user used. Don't invert by negating the condition. - User says "hide X when Y" → `WHEN <Y> THEN HIDE <X>` (target stays visible by default). - User says "show X when Y" → `WHEN <Y> THEN SHOW <X>` (target hidden by default, revealed when condition fires). <example> User: "Hide the company name field when the role is Student" WRONG — inverted into SHOW + negated condition: WHEN role IS Professional THEN SHOW companyName WHEN role IS Academic THEN SHOW companyName RIGHT — direct HIDE matching the user's verb: WHEN role IS Student THEN HIDE companyName </example> </verb_matches_user>
apply_logic
Configure block's properties. Use the current form ledger to find blocks and their properties. IMPORTANT: - Those are partial (incremental) updates - only properties you include will be changed - Set a property to null to unset it - To change the type of a question, use the change_type operation once on ONLY 1 option block in the group. This will change the entire group to that type. - To hide entire question, update the TITLE block and all question blocks will be hidden automatically - For hidden_fields_settings: provide the complete list of hidden fields (add new, remove by exclusion, rename by keeping UUID and changing name) - For calculated_fields_settings: provide the complete list of calculated fields (add/remove/rename/change-value/retype). Keep an existing field's UUID to update it (rename, change type, change value), omit UUID for new entries, exclude an entry to remove it. CALCULATE rules referencing a removed field are auto-cleaned. To remove a single calc field while keeping others, remove_blocks works too — pass that field's UUID directly.
configure_blocks
Creates new blocks in the form. Blocks default structure with examples: - Name question: [TITLE, INPUT_TEXT] (short text) - Message question: [TITLE, TEXTAREA] (long text) - Country question: [TITLE, DROPDOWN_OPTION, DROPDOWN_OPTION, ...] (compact single-select) - Interests question: [TITLE, CHECKBOX, CHECKBOX, ...] (multi-select checklist) - Satisfaction question: [TITLE, LINEAR_SCALE] (numeric scale with labels) - Quality rating: [TITLE, RATING] (star rating) - Payment collection: [TITLE, PAYMENT] (collect payment with Stripe) - Yes/No question: [TITLE, MULTIPLE_CHOICE_OPTION, MULTIPLE_CHOICE_OPTION] (radio buttons) - Skills multi-select: [TITLE, MULTI_SELECT_OPTION, MULTI_SELECT_OPTION, ...] (dropdown multi-select) - Priorities ranking: [TITLE, RANKING_OPTION, RANKING_OPTION, ...] (drag to reorder) - Matrix table: [TITLE, MATRIX, MATRIX_COLUMN, MATRIX_COLUMN, ..., MATRIX_ROW, MATRIX_ROW, ...] (columns first, then rows) - Bot protection: [CAPTCHA] (no TITLE needed) - Location detection: [RESPONDENT_COUNTRY] (auto-detects from IP, no TITLE needed) - URL tracking: [HIDDEN_FIELDS] (captures query params like ?utm_source=email&campaign=summer, no TITLE needed) - Calculated fields: [CALCULATED_FIELDS] (named targets for CALCULATE logic rules, no TITLE needed) - New page: [PAGE_BREAK, ...content] (creates a new page with content) - New section: [HEADING_2, TEXT, ...content] (creates a new section with content) PAGE BREAK SEMANTICS: - PAGE_BREAK starts a new page - All blocks on a page share the same page number in the ledger IMPORTANT: - Groups with the same insertAfterBlockUuid = auto-chain groups (only first group uses it, rest chain). - All questions are REQUIRED by default. The user sees a required indicator automatically in the UI. If you need to make a question optional, use configure_blocks tool after creating the question. Examples with ledger: # | text | blockUuid | type | questionUuid | page | insertAfterBlockUuid_BEFORE | notes PAGE 1 ─────────────────────────────────────────────────────────────────────────────────────────────────────── 1 | Contact | aaa | FORM_TITLE | - | 1 | - | Form start 2 | Name | bbb | TITLE | xxx | 1 | aaa | Name question starts 3 | | ccc | INPUT_TEXT | xxx | 1 | bbb | Name question ends 4 | Country | ddd | TITLE | yyy | 1 | ccc | Country question starts 5 | US | eee | DROPDOWN_OPTION | yyy | 1 | ddd | Country question 6 | UK | fff | DROPDOWN_OPTION | yyy | 1 | eee | Country question ends PAGE 2 ─────────────────────────────────────────────────────────────────────────────────────────────────────── 7 | | ggg | PAGE_BREAK | - | 2 | fff | Page break (creates new page) 8 | Email | hhh | TITLE | zzz | 2 | ggg | Email question starts 9 | | iii | INPUT_EMAIL | zzz | 2 | hhh | Email question ends Add phone after name: // AFTER a question: copy the row's "blockUuid" you want to insert after (last block of the question) {"groups":[{"blocks":[{"type":"TITLE","html":"Phone"},{"type":"INPUT_PHONE_NUMBER"}],"insertAfterBlockUuid":"ccc"}]} Add company before country: // CRITICAL: BEFORE a question means DIRECTLY BEFORE the question. Use the row immediately preceding the question; there should be NO other rows between! // Find "Country" in the current form ledger and copy its "insertAfterBlockUuid_BEFORE" into insertAfterBlockUuid {"groups":[{"blocks":[{"type":"TITLE","html":"Company"},{"type":"INPUT_TEXT"}],"insertAfterBlockUuid":"ccc"}]} Add subtitles/descriptions/hints to each question: // WITHIN a question: use question's TITLE blockUuid // Execute in one atomic tool call: a group per subtitle. {"groups":[{"blocks":[{"type":"TEXT","html":"Your full legal name"}],"insertAfterBlockUuid":"bbb"},{"blocks":[{"type":"TEXT","html":"Select your country"}],"insertAfterBlockUuid":"ddd"},{"blocks":[{"type":"TEXT","html":"Your business email"}],"insertAfterBlockUuid":"hhh"}]} Add welcome text at the top: // AT THE TOP: use FORM_TITLE's blockUuid {"groups":[{"blocks":[{"type":"TEXT","html":"Welcome!"}],"insertAfterBlockUuid":"aaa"}]} Add birthdate, birth place and website after name: // Execute in one atomic tool call: sequential blocks together in one group. {"groups":[{"blocks":[{"type":"TITLE","html":"Birthdate"},{"type":"INPUT_DATE"},{"type":"TITLE","html":"Birth place"},{"type":"INPUT_TEXT"},{"type":"TITLE","html":"Website"},{"type":"INPUT_LINK"}],"insertAfterBlockUuid":"ccc"}]} Add new Page 1 with welcome text: // AT THE TOP: use FORM_TITLE's blockUuid {"groups":[{"blocks":[{"type":"PAGE_BREAK"},{"type":"TEXT","html":"Welcome!"}],"insertAfterBlockUuid":"aaa"}]} Add page 3 with phone question: // After last block on page 2 {"groups":[{"blocks":[{"type":"PAGE_BREAK"},{"type":"TITLE","html":"Phone"},{"type":"INPUT_PHONE_NUMBER"}],"insertAfterBlockUuid":"iii"}]} Split the first page into two pages after name: // Use blockUuid where page should split // PAGE_BREAK is the only block in the group, no other blocks allowed {"groups":[{"blocks":[{"type":"PAGE_BREAK"}],"insertAfterBlockUuid":"ccc"}]} Add hidden fields to capture UTM parameters: // Hidden fields capture values from URL query string (e.g., ?utm_source=email&utm_campaign=spring) // Can not have a TITLE - these fields are invisible to users {"groups":[{"blocks":[{"type":"HIDDEN_FIELDS","hiddenFields":[{"name":"utm_source"},{"name":"utm_campaign"},{"name":"utm_medium"}]}],"insertAfterBlockUuid":"iii"}]} Add thank you page with thank you message: // Use the last block's blockUuid {"groups":[{"blocks":[{"type":"PAGE_BREAK","isThankYouPage":true},{"type":"TEXT","html":"Thank you for submitting!"}],"insertAfterBlockUuid":"iii"}]} FIELD REFERENCES IN TEXT (Mentions): Use {{questionUuid}} or {{Field Title}} in TEXT, TITLE, or HEADING html to display a field's answer dynamically. Only reference existing fields — create the field first, then reference it. Example: {"type":"TEXT","html":"Hello {{2c1674f6-843d-4fca-bddd-6598f0040ca7}}!"} This is NOT for default answers — use configure_blocks with defaultAnswer for that.
create_blocks
Create a new form with the specified title and optional styling. This will clear any existing blocks and start fresh. MUST call SaveForm after building the form to publish it.
create_new_form
Extract colors, fonts, and images from a website URL. Use when users want to match their website, copy brand colors, or style forms like an existing site. Automatically extracts primary/accent colors, button styling, and fonts for use with update_styling tool.
extract_brand
Fetch form analytics and performance insights. Returns metrics (views, completions, conversion rate), visitor time-series, submission time-series, traffic dimensions (sources, browsers, countries), and question drop-off data. Use the include parameter to request only specific sections.
fetch_insights
Fetch submissions for a form. Returns paginated results with question labels and response data. Use the page parameter to navigate through results when hasMore is true.
fetch_submissions
Return Tally's CSS selector reference and this form's current custom CSS. Call before writing a value for update_custom_css so you can merge with existing rules instead of overwriting them.
inspect_custom_css
Retrieve the current form structure as a ledger. The ledger shows all blocks with their UUIDs, types, positions, and properties.
list_blocks
List forms the user has access to. Returns paginated results with form metadata including name, status, submission count, and timestamps. Use the page parameter to navigate through results when hasMore is true. Optionally filter by workspace IDs.
list_forms
List all workspaces the user can access. Use before creating a new form to select the target workspace. Selection rules: if only one workspace → use it; if multiple → ask the user which to use; if a personal workspace exists ('My Workspace' or unnamed) you may auto-select it. When presenting the list of workspaces, use a numbered list for easy selection.
list_workspaces
Load existing form for editing
load_form
Move individual blocks to a new position. Use the current form ledger to find blocks. IMPORTANT: - FORM_TITLE block cannot be moved (must stay at top) - To move or swap entire questions, use reposition_questions tool instead - To move, swap or reorder entire pages, use reposition_pages tool instead
move_blocks
Remove specific blocks from the form. Use the current form ledger to find blocks. Also accepts the uuid of an individual calculated field or hidden field — in that case only that entry is removed, and the parent block stays unless it becomes empty. IMPORTANT: - Never remove blocks unless the user explicitly asked you to - To remove entire questions, use remove_questions tool instead - To remove entire pages, use remove_pages tool instead
remove_blocks
Remove entire pages from the form. Use the current form ledger to find page numbers. IMPORTANT: - Never remove pages unless the user explicitly asked you to - Removes all blocks on the page including the PAGE_BREAK - To remove individual blocks (TEXT, DIVIDER, etc.), use remove_blocks tool instead
remove_pages
Remove entire questions from the form. Use the current form ledger to find questions by their questionUuid. IMPORTANT: - Never remove questions unless the user explicitly asked you to - Removes all blocks that belong to the question (TITLE + input/options) - To remove individual blocks (TEXT, DIVIDER, etc.), use remove_blocks tool instead
remove_questions
Move, swap, or reorder pages (1-based). Commands: "move", "swap", "reorder". Use move for relocating a single page, swap for exchanging two pages, and reorder for setting the exact final sequence. IMPORTANT: Check the ledger first to see how many pages exist. The form may have only 1 page if no PAGE_BREAK blocks have been added yet. IMPORTANT: - To create new pages, use create_blocks tool instead
reposition_pages
Move or swap entire questions (including their title and all inputs/options together). IMPORTANT: - This tool moves or swaps COMPLETE questions as a unit (title + all associated inputs/options) - To move individual blocks within a question (e.g., move options or reorder options), use move_blocks tool instead - To move, swap or reorder entire pages, use reposition_pages tool instead
reposition_questions
Save form changes, always report back to the user with the form URL and if it was published or saved as draft
save_form
Organize blocks into side-by-side columns. Use "create_column_list" to create a new column layout with 2+ columns. Use "create_column" to add a NEW separate column to an existing layout. Use "add_to_column" to add more blocks within the SAME existing column (vertically stacked, not side-by-side). Use "detach_from_column" to remove blocks from their column layout. Use "set_column_ratio" to adjust column widths.
set_column_layout
Set or update the form title (always appears at the top of the form, position can not be changed)
set_form_title
LAST-RESORT custom CSS for effects with no structured equivalent in update_styling: pseudo-states (:hover, :focus, :active), animations, hiding elements, ::placeholder. ALWAYS try update_styling first for colors, fonts, sizes, alignment, borders, padding, and width — those have structured properties. ALWAYS call inspect_custom_css before writing CSS to read the current CSS and preserve existing rules. Requires Tally Pro.
update_custom_css
Update form settings and configuration. IMPORTANT: - selfEmailSubject and respondentEmailSubject support mentions - selfEmailBody and respondentEmailBody support rich HTML formatting (bold, italic, underline, colors) and mentions LINK PREVIEW METADATA: The metaSiteName, metaSiteFaviconUrl, metaTitle, metaDescription, and metaImageUrl fields customize the preview card shown when a form URL is shared in apps like Slack, Discord, iMessage, and social platforms. They do not change the visible form content. FIELD REFERENCES (Mentions): Use {{questionUuid}} or {{Field Title}} to display a field's answer dynamically. Example: "Hello {{2c1674f6-843d-4fca-bddd-6598f0040ca7}}! Thanks for your feedback." Special email mentions: Use {{allAnswers}} in selfEmailBody, respondentEmailBody to include all submitted question titles and answers. Example: "A new response was submitted. {{allAnswers}}" Use {{id}}, {{respondentId}}, or {{formName}} to include submission metadata in the subject or body. Example: "New submission {{id}} for {{formName}}."
update_settings
Update form styling. Batch ALL desired changes (appearance, advanced) into a single call — do not split per property or call repeatedly across turns. For pseudo-states (:hover, :focus), animations, hiding elements, ::placeholder, or any effect without a structured equivalent here, use the separate update_custom_css tool instead. If any requested properties are unavailable for the current user, the tool drops them and its feedback tells you what to say.
update_styling
Update text/HTML content for blocks in the form. Use the current form ledger to find blocks. Supports: form title, question titles, text blocks, headings (H1-H3), input placeholders (text/email/phone/date/time/link/number/textarea), and option text (dropdown/multiple choice/checkboxes/multi-select/ranking). Batch updates: Can update multiple blocks atomically in a single operation. IMPORTANT: - Text blocks (TITLE, TEXT, HEADING) support rich HTML formatting (bold, italic, underline, colors) and mentions - Input placeholders and option text automatically strip HTML to plain text (no mentions) - Use the "blockUuid" from the ledger to identify which blocks to update FIELD REFERENCES IN TEXT (Mentions): Use {{questionUuid}} or {{Field Title}} in TEXT, TITLE, or HEADING html to display a field's answer dynamically. Example: "Hello {{2c1674f6-843d-4fca-bddd-6598f0040ca7}}! Thanks for your feedback." This is NOT for default answers — use configure_blocks with defaultAnswer for that.
update_text
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Tally alternatives on ChatGPT?
As of 2026-08-14, Tally competes with Cognito MCP, CrowdHum, deoochform, Formbyte, FormEdge, Formester, Formfacade, FormHug, Fyrebox, Jotform, Neartail, SurveyMonkey, SurveySparrow: Forms & Surveys in ChatGPT Form & Survey Builders, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.