{"id":1559,"date":"2025-07-29T09:18:00","date_gmt":"2025-07-29T14:18:00","guid":{"rendered":"https:\/\/automatethemundane.com\/index.php\/2025\/07\/29\/copilot-studio-and-ai-builder-better-together-post-3-power-pages-creating-a-public-application-submission-form\/"},"modified":"2025-07-29T09:18:00","modified_gmt":"2025-07-29T14:18:00","slug":"copilot-studio-and-ai-builder-better-together-post-3-power-pages-creating-a-public-application-submission-form","status":"publish","type":"post","link":"https:\/\/automatethemundane.com\/index.php\/2025\/07\/29\/copilot-studio-and-ai-builder-better-together-post-3-power-pages-creating-a-public-application-submission-form\/","title":{"rendered":"Copilot Studio and AI builder &#8211; Better together. Post 3 \u2013 Power Pages: Creating a Public Application Submission Form"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Introduction<\/h1>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">When building a modern, end-to-end hiring platform on the Power Platform, one of the most critical pieces is the <strong>public-facing application form<\/strong>. It needs to be clean, simple, and accessible\u2014while still integrating tightly with your backend data model for automation and tracking.<\/p>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">In this post, we\u2019ll show how to use <strong>Power Pages<\/strong> to create a public application portal that allows job seekers to:<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li>View available job listings,<\/li>\n\n\n\n<li>Submit their name and contact information,<\/li>\n\n\n\n<li>Upload a resume,<\/li>\n\n\n\n<li>And have it all stored and linked correctly in <strong>Dataverse<\/strong>.<\/li>\n<\/ul>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">This form is built for <strong>anonymous users<\/strong>, meaning no login or authentication is required\u2014ideal for public submissions. Behind the scenes, the form creates <strong>Candidate<\/strong>, <strong>Resume<\/strong>, and <strong>Application<\/strong> records in a structured, relational format that sets the stage for automation via <strong>Power Automate<\/strong>, <strong>AI Builder<\/strong>, and <strong>Copilot Studio<\/strong>.<\/p>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">This post is part of an ongoing blog series exploring how to build a modern, AI-powered talent intake system using the Power Platform from end to end\u2014including Dataverse modeling, Model-Driven Apps, Power Pages, and intelligent automation.<\/p>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n<h1 class=\"wp-block-heading\"><strong>Why Power Pages?<\/strong><\/h1>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">Power Pages was the natural choice for exposing our application system to the public. It gave us the flexibility to:<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li>Display live job listings directly from Dataverse.<\/li>\n\n\n\n<li>Capture candidate information and resumes via a simple, secure form.<\/li>\n\n\n\n<li>Trigger downstream automation immediately after submission (e.g., resume parsing, screening workflows).<\/li>\n\n\n\n<li>Maintain full control over permissions and styling.<\/li>\n<\/ul>\n\n\n<h2 class=\"wp-block-heading\"><strong>Form Flow Overview<\/strong><\/h2>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">The public application process is structured as follows<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2025\/07\/image-13-1024x415.png\" alt=\"\"\/><\/figure>\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Select a Job Posting<\/strong>\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">The landing page displays a filtered list of active job postings. When a candidate selects one, we carry the <code>Job Posting ID<\/code> into the next step.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2025\/07\/image-14-1024x462.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li><strong>Submit Candidate Information<\/strong>\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">In this step, the user enters their name and email. This creates a new <strong>Candidate<\/strong> record in Dataverse if one is not already added.<\/p>\n<\/li>\n\n\n\n<li><strong>Upload Resume<\/strong>\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">The candidate uploads a pdf resume, which is saved as a new <strong>Resume<\/strong> record related to the Candidate.<\/p>\n<\/li>\n\n\n\n<li><strong>Create Application Record<\/strong>\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">Finally, we create an <strong>Application<\/strong> record linking the selected <strong>Job Posting<\/strong> and the uploaded <strong>Resume<\/strong>. This record becomes the entry point for screening, interview tracking, and Power BI reporting.<\/p>\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2025\/07\/image-15-1024x452.png\" alt=\"\"\/><\/figure>\n<\/li>\n<\/ol>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">All of this happens anonymously\u2014no need for user authentication. We handle relational logic and validations via JavaScript and Web API calls behind the scenes.<\/p>\n\n\n<h2 class=\"wp-block-heading\"><strong>Web API in Action<\/strong><\/h2>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">To keep the experience smooth and responsive, we bypassed traditional Power Pages forms in favor of custom HTML and JavaScript that call the Dataverse Web API directly. This allowed us to:<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li>Dynamically validate whether a Candidate\/Resume combination already exists.<\/li>\n\n\n\n<li>Chain entity creation in real time, carrying IDs between steps.<\/li>\n\n\n\n<li>Control the look, feel, and logic of the form entirely\u2014without sacrificing data integrity.<\/li>\n<\/ul>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">This API-first approach laid the groundwork for integrating <strong>Copilot Studio<\/strong> and <strong>AI Builder<\/strong> in upcoming posts, where we\u2019ll add intelligent classification, screening automation, and follow-up communication.<\/p>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">&nbsp;<\/p>\n\n\n<h1 class=\"wp-block-heading\"><strong>Next Steps<\/strong><\/h1>\n\n\n<p class=\"has-text-color\" style=\"color: rgb(0, 0, 0)\">With the public form in place, the pipeline is now open\u2014from job posting to application intake. In the next post, we\u2019ll enhance the process by using <strong>Copilot Studio<\/strong> to classify applications and extract key data from resumes using <strong>AI Builder<\/strong>.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Introduction When building a modern, end-to-end hiring platform on the Power Platform, one of the most critical pieces is the public-facing application form. It needs to be clean, simple, and accessible\u2014while still integrating tightly with your backend data model for automation and tracking. In this post, we\u2019ll show how to use Power Pages to create [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1560,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,57],"tags":[],"class_list":["post-1559","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dataverse","category-power-pages","entry","has-media"],"jetpack_featured_media_url":"https:\/\/automatethemundane.com\/wp-content\/uploads\/2025\/07\/photo-1573867639040-6dd25fa5f597-scaled.jpg","_links":{"self":[{"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/posts\/1559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/comments?post=1559"}],"version-history":[{"count":0,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/posts\/1559\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/media\/1560"}],"wp:attachment":[{"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/media?parent=1559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/categories?post=1559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/tags?post=1559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}