Updated Oct 22, 2025

Step-by-Step Guide: Building an Upwork Clone with Adalo

Table of Contents
Text Link

This comprehensive tutorial will walk you through building a functional freelance marketplace using Adalo's no-code app builder. With the growing global freelance platforms market and increasing freelance workforce participation, there's never been a better time to launch your own freelance marketplace. You'll learn how to create user profiles, job posting systems, bidding functionality, payment processing, and rating systems—all without writing code.

Prerequisites and Initial Setup

Step 1: Create Your Adalo Account and Choose a Plan

  1. Visit Adalo.com and sign up for an account
  2. Start with the Free plan to build and test your app
  3. For publishing a production marketplace, consider the Professional plan ($65/month billed monthly; ~20% off with annual billing).:
    • Custom domain support
    • 2 published apps and 25GB storage
    • Custom integrations
    • Maps/geolocation availability varies by plan, check the current pricing table before positioning it as a Professional-only feature.
  4. Business plan ($250/month) recommended if you need:
    • Multiple published apps
    • Unlimited editor seats
    • Priority support

Compare Adalo pricing plans

Step 2: Create Your Marketplace App

  1. Click "Create New App" from your dashboard
  2. Choose “Mobile App” (published to iOS, Android, and the web from one project).
  3. Name your app (e.g., "FreelanceHub")
  4. Select "Start from Scratch" to build custom marketplace features

Step 3: Configure Your App Theme

  1. Choose brand colors:
    • Primary color (e.g., blue for trust)
    • Secondary color (e.g., green for action buttons)
  2. Select professional typography
  3. Click "Continue" to enter the app builder

Building the Database Structure

Step 4: Enhance the Users Collection

Adalo creates a default Users collection. You'll extend it for marketplace functionality:

  1. Click the Database icon in the left sidebar
  2. Select "Users" collection
  3. Add these properties (click "+ Add Property" for each):
    • User Type (Text) - Values: "Freelancer", "Client"
    • Profile Photo (Image)
    • Phone Number (Text)
    • Bio (Text - Multiline)
    • Skills (Text - for searchable tags)
    • Hourly Rate (Number) - for freelancers
    • Location (Location)
    • City (Text)
    • Country (Text)
    • Portfolio URL (Text)
    • Years Experience (Number)
    • Average Rating (Number)
    • Total Reviews (Number)
    • Member Since (Date & Time - Automatic)
    • Account Balance (Number) - for tracking earnings/credits

‍

Learn more about Adalo's database

Step 5: Create the Jobs Collection

‍

  1. Click "+ Add Collection"
  2. Name it "Jobs"
  3. Add these properties:
    • Job Title (Text)
    • Description (Text - Multiline)
    • Category (Text) - Values: "Web Development", "Design", "Writing", "Marketing", "Virtual Assistant"
    • Budget Type (Text) - Values: "Fixed Price", "Hourly"
    • Budget Amount (Number)
    • Required Skills (Text)
    • Experience Level (Text) - Values: "Entry", "Intermediate", "Expert"
    • Project Duration (Text) - Values: "Less than 1 month", "1-3 months", "3-6 months", "6+ months"
    • Status (Text) - Values: "Open", "In Progress", "Completed", "Cancelled"
    • Location Preference (Text) - Values: "Remote", "On-site", "Hybrid"
    • Proposals Count (Number)
    • Posted Date (Date & Time - Automatic)
    • Deadline (Date & Time)

Step 6: Create the Proposals Collection

  1. Click "+ Add Collection"
  2. Name it "Proposals"
  3. Add properties:
    • Cover Letter (Text - Multiline)
    • Proposed Rate (Number)
    • Delivery Time (Number) - in days
    • Status (Text) - Values: "Pending", "Accepted", "Rejected", "Withdrawn"
    • Submitted Date (Date & Time - Automatic)
    • Portfolio Samples (Text) - URLs to work samples

Step 7: Create the Contracts Collection

  1. Click "+ Add Collection"
  2. Name it "Contracts"
  3. Add properties:
    • Start Date (Date & Time)
    • End Date (Date & Time)
    • Total Amount (Number)
    • Payment Terms (Text)
    • Milestones (Text - Multiline)
    • Status (Text) - Values: "Active", "Completed", "Disputed", "Cancelled"
    • Hours Worked (Number) - for hourly contracts
    • Amount Paid (Number)
    • Amount Remaining (Number)

Step 8: Create the Reviews Collection

  1. Click "+ Add Collection"
  2. Name it "Reviews"
  3. Add properties:
    • Rating (Number) - 1-5 scale
    • Communication Rating (Number)
    • Quality Rating (Number)
    • Professionalism Rating (Number)
    • Review Text (Text - Multiline)
    • Response (Text - Multiline) - for reviewer to respond
    • Created Date (Date & Time - Automatic)
    • Would Recommend (True/False)

Step 9: Create the Messages Collection

  1. Click "+ Add Collection"
  2. Name it "Messages"
  3. Add properties:
    • Message Text (Text - Multiline)
    • Sent Date (Date & Time - Automatic)
    • Is Read (True/False)
    • Attachment URL (Text) - for file sharing

Step 10: Create the Payments Collection

  1. Click "+ Add Collection"
  2. Name it "Payments"
  3. Add properties:
    • Amount (Number)
    • Platform Fee (Number) - your marketplace commission
    • Freelancer Amount (Number) - amount after fees
    • Payment Method (Text)
    • Stripe Payment ID (Text)
    • Status (Text) - Values: "Pending", "Held for Processing", "Released", "Refunded"
    • Payment Date (Date & Time - Automatic)
    • Release Date (Date & Time)

Step 11: Set Up Database Relationships

Setting up relational database connections is crucial for marketplace functionality:

  1. In Jobs collection:
  • Add relationship to Users: "Posted By" (A Client can post many Jobs)
  • Add relationship to Users: "Assigned To" (One-to-One for hired freelancer)
  1. In Proposals collection:
  • Add relationship to Jobs: Many-to-One (Each job can have many proposals)
  • Add relationship to Users: "Freelancer" (Each freelancer can submit many proposals)
  1. In Contracts collection:
  • Add relationship to Jobs: One-to-One
  • Add relationship to Users: "Client"
  • Add relationship to Users: "Freelancer"
  • Add relationship to Proposals: One-to-One (the accepted proposal)
  1. In Reviews collection:
  • Add relationship to Users: "Reviewer" (person giving review)
  • Add relationship to Users: "Reviewed" (person receiving review)
  • Add relationship to Contracts: Many-to-One
  1. In Messages collection:
  • Add relationship to Users: "Sender"
  • Add relationship to Users: "Recipient"
  • Add relationship to Jobs: Many-to-One (messages about specific job)
  1. In Payments collection:
  • Add relationship to Contracts: One-to-Many (contracts can have multiple payments/milestones)
  • Add relationship to Users: "Client"
  • Add relationship to Users: "Freelancer"

Creating User Authentication

Step 12: Build the Welcome Screen

  1. Rename the default screen to "Welcome"
  2. Add your marketplace logo (Image component)
  3. Add headline text: "Connect with skilled freelancers or find your next project"
  4. Add value proposition points:
    • "Secure payments with payment protection"
    • "Verified freelancers and clients"
    • "Pay only when satisfied"
  5. Add two buttons:
    • "Sign Up" → Link to "Account Type" screen
    • "Login" → Link to "Login" screen

Step 13: Create Account Type Selection Screen

  1. Add new screen "Account Type"
  2. Add header text: "Join as a client or freelancer"
  3. Add two large selection cards:
    • Client Card: "I'm a client, hiring for a project"
    • Freelancer Card: "I'm a freelancer, looking for work"
  4. Each card button links to separate signup screens

Step 14: Create Client Signup Screen

  1. Add new screen "Client Signup"
  2. Add Form component connected to Users:
    • Email (required)
    • Password (required, minimum 8 characters)
    • Full Name (required)
    • Company Name (optional)
    • Phone Number
  3. Set User Type to "Client" automatically on form submission
  4. On successful signup → Link to "Client Onboarding"

Step 15: Create Freelancer Signup Screen

  1. Add new screen "Freelancer Signup"
  2. Add Form component connected to Users:
    • Email (required)
    • Password (required)
    • Full Name (required)
    • Phone Number
  3. Set User Type to "Freelancer" automatically
  4. On successful signup → Link to "Freelancer Profile Setup"

Step 16: Build Freelancer Profile Setup

  1. Add new screen "Freelancer Profile Setup"
  2. Add multi-step form to update Logged In User:
    • Step 1: Basic Info
      • Profile Photo (Image Picker)
      • Professional Title
      • Hourly Rate
      • Location/City
    • Step 2: Skills & Experience
      • Skills (text input with tags)
      • Years of Experience
      • Bio/Description
      • Portfolio URL
    • Step 3: Availability
      • Available hours per week
      • Timezone
  3. Submit button → Link to "Freelancer Dashboard"

Step 17: Create Client Onboarding

  1. Add screen "Client Onboarding"
  2. Brief profile completion:
    • Company name
    • Industry
    • Location
  3. Quick tutorial on posting first job
  4. Button: "Post Your First Job" → Link to "Post Job" screen

Building the Freelancer Interface

Step 18: Create Freelancer Dashboard

‍

  1. Add new screen "Freelancer Dashboard"
  2. Add top navigation bar:
    • "Browse Jobs" tab
    • "My Proposals" tab
    • "Active Contracts" tab
    • "Messages" tab
    • "Profile" icon
  3. Add stats summary section:
    • Total proposals submitted (count)
    • Active contracts
    • Total earnings this month
    • Average rating
  4. Add "Available Jobs" list (covered in next step)

Step 19: Build Browse Jobs Screen

  1. Add new screen "Browse Jobs" (or tab on dashboard)
  2. Add search and filter section:
    • Search Input: Search by keywords in title/description
    • Dropdown filters:
      • Category
      • Experience Level
      • Budget Range
      • Budget Type (Fixed/Hourly)
  3. Add List of Jobs:
    • Filter: Status = "Open"
    • Sort by: Posted Date (Newest First)
  4. Display for each job card:
    • Job Title
    • Category badge
    • Budget and type
    • Posted time (e.g., "2 hours ago")
    • Number of proposals
    • Required skills
  5. Click on job → Link to "Job Details" screen

Step 20: Create Job Details Screen

  1. Add new screen "Job Details"
  2. Display current job information:
    • Full job title and description
    • Client name and rating
    • Budget details
    • Project duration
    • Required skills
    • Experience level needed
    • Number of proposals received
    • Posted date
  3. Add "About the Client" section:
    • Client's average rating
    • Jobs posted
    • Hire rate
    • Member since
  4. Add action buttons:
    • "Submit Proposal" → Link to "Submit Proposal" screen
    • "Save Job" → Add to saved jobs list

Step 21: Build Submit Proposal Screen

  1. Add new screen "Submit Proposal"
  2. Add Form connected to Proposals collection:
    • Set Job relationship to Current Job
    • Set Freelancer to Logged In User
    • Cover Letter (Large text area)
      • Placeholder: "Explain why you're the best fit..."
    • Proposed Rate (Number input)
      • Show suggested range based on job budget
    • Delivery Time (Number input in days)
    • Portfolio Samples (Text input for URLs)
  3. Show fee breakdown:
    • Your proposed rate: $X
    • Platform fee (e.g., 10-20%—you can set your own rate): -$Y
    • You'll receive: $Z
  4. Submit button actions:
    • Create Proposal record
    • Update Job → Proposals Count (+1)
    • Send notification to client
    • Navigate to "Proposal Submitted" confirmation

Step 22: Create My Proposals Screen

  1. Add new screen "My Proposals"
  2. Add tabs for proposal status:
    • Active (Pending)
    • Accepted
    • Rejected
  3. Add List of Proposals:
    • Filter: Freelancer = Logged In User
    • Sort by: Submitted Date (Newest)
  4. Display for each proposal:
    • Job title
    • Submitted date
    • Proposed rate
    • Status badge
    • Client response (if any)
  5. Click proposal → View full proposal details
  6. Add "Withdraw Proposal" button for pending proposals

Building the Client Interface

Step 23: Create Client Dashboard

  1. Add new screen "Client Dashboard"
  2. Add navigation tabs:
    • "Active Jobs"
    • "Posted Jobs"
    • "Hired Freelancers"
    • "Messages"
  3. Add quick stats:
    • Active jobs
    • Total spent this month
    • Hired freelancers
  4. Add prominent "Post a Job" button

Step 24: Build Post Job Screen

  1. Add new screen "Post Job"
  2. Add multi-step Form connected to Jobs:
    • Step 1: Job Basics
      • Job Title
      • Category (Dropdown)
      • Description (detailed)
    • Step 2: Budget & Timeline
      • Budget Type (Fixed/Hourly)
      • Budget Amount
      • Project Duration
      • Deadline (optional)
    • Step 3: Requirements
      • Required Skills (text tags)
      • Experience Level
      • Location Preference
  3. Set automatic values:
    • Posted By = Logged In User
    • Status = "Open"
    • Proposals Count = 0
  4. Submit button actions:
    • Create Job record
    • Navigate to "Job Posted" confirmation
    • Send notifications to matching freelancers

Step 25: Create Job Management Screen

  1. Add screen "Manage Job"
  2. Display current job details
  3. Add List of Proposals for this job:
    • Filter: Job = Current Job
    • Sort by: Rating (highest first) or Date
  4. For each proposal, show:
    • Freelancer photo and name
    • Average rating and reviews count
    • Proposed rate and timeline
    • Cover letter excerpt
    • "View Full Proposal" button
  5. Add job management options:
    • Edit job (if no proposals yet)
    • Close job to new proposals
    • Delete job (if no proposals)

Step 26: Build Proposal Review Screen

  1. Add screen "Review Proposal"
  2. Display full proposal details:
    • Complete cover letter
    • Proposed rate and delivery time
    • Portfolio samples
  3. Show freelancer profile summary:
    • Profile photo
    • Professional title
    • Average rating
    • Completed jobs count
    • Success rate
    • Skills
    • "View Full Profile" link
  4. Add action buttons:
    • "Message Freelancer" → Start conversation
    • "Hire Freelancer" → Create contract
    • "Decline" → Update proposal status

Step 27: Create Contract Creation Screen

  1. Add screen "Create Contract"
  2. Pre-fill with proposal details
  3. Add Form to create Contract:
    • Confirm rate
    • Set payment terms (upfront %, on completion %)
    • Define milestones (for larger projects)
    • Set start date
    • Add project specifics
  4. On submission:
    • Create Contract record
    • Update Job status to "In Progress"
    • Update Proposal status to "Accepted"
    • Reject all other proposals for this job
    • Send notification to freelancer
    • Navigate to "Contract Active" screen

Implementing Messaging

Step 28: Build Messages List Screen

  1. Add screen "Messages"
  2. Add List of unique conversations:
    • Group Messages by Job
    • Filter: Sender = Logged In User OR Recipient = Logged In User
    • Show most recent message per conversation
  3. Display for each conversation:
    • Other user's photo and name
    • Job title
    • Last message preview
    • Timestamp
    • Unread indicator (if Is Read = False)
  4. Click conversation → Link to "Chat" screen

Step 29: Create Chat Screen

  1. Add screen "Chat"
  2. Add header showing:
    • Other user's name and photo
    • Job title
    • "View Job" link
  3. Add List of Messages:
    • Filter: (Sender = Logged In User AND Recipient = Other User) OR (Sender = Other User AND Recipient = Logged In User)
    • Filter by Current Job
    • Sort by: Sent Date (Oldest first)
  4. Style messages:
    • Sent messages aligned right
    • Received messages aligned left
    • Show timestamp
    • Show read status
  5. Add message input at bottom:
    • Form connected to Messages
    • Text input field
    • Send button (creates Message record)
  6. Auto-refresh messages using countdown timer (every 5 seconds)

Learn about Adalo messaging features

Adding Payment Processing with Stripe

Step 30: Install Stripe Integration

  1. Visit Adalo Marketplace
  2. Search for "Stripe" integration
  3. Click "Install"
  4. You'll need Stripe API keys (get from Stripe Dashboard)
  5. Enter your Stripe keys in Adalo settings

Step 31: Create Escrow-Like Payment Screen

  1. Add screen "Make Payment"
  2. Display contract details:
    • Freelancer name
    • Project description
    • Total amount
    • Payment breakdown
  3. Add Stripe Payment component:
    • Amount: Contract → Total Amount
    • Add platform fee calculation (e.g., 10-20% commission—you can set your own rate)
    • Client pays full amount
    • Funds held for processing (Note: True marketplace split payments require Stripe Connect and may require custom actions or an external backend like Xano)
  4. Add payment form fields:
    • Card number
    • Expiry date
    • CVC
    • Billing zip code
    • Save card for future (checkbox)
  5. On successful payment:
    • Create Payment record with Status = "Held for Processing"
    • Update Contract status
    • Send confirmation to both users
    • Navigate to "Payment Successful" screen

Step 32: Build Payment Release Flow

  1. Add "Release Payment" button on completed contract
  2. Client clicks to release funds after satisfied with work
  3. Update Payment:
    • Status = "Released"
    • Release Date = Current Date/Time
    • Calculate Freelancer Amount (Total - Platform Fee)
  4. Update freelancer's Account Balance
  5. Send payment release notification
  6. Prompt client to leave review

Step 33: Create Earnings Dashboard

  1. Add screen "Earnings" for freelancers
  2. Display financial summary:
    • Available balance
    • Pending (in escrow-like hold)
    • Total earned (lifetime)
    • This month's earnings
  3. Add List of Payments:
    • Filter: Freelancer = Logged In User
    • Sort by: Payment Date (Newest)
  4. Show payment details:
    • Client name
    • Job title
    • Amount received
    • Platform fee
    • Status
    • Date

Building the Rating and Review System

Step 34: Create Leave Review Screen

  1. Add screen "Leave Review" (shown after contract completion)
  2. Display project summary
  3. Add Form connected to Reviews:
    • Overall Rating (1-5 stars)
    • Communication Rating (1-5 stars)
    • Quality Rating (1-5 stars)
    • Professionalism Rating (1-5 stars)
    • Written Review (text area)
    • Would Recommend (Yes/No toggle)
  4. Set relationships:
    • Reviewer = Logged In User
    • Reviewed = Other User in contract
    • Link to Contract

Step 35: Calculate Average Ratings

According to research, 89% of companies compete primarily on customer experience, making quality ratings critical.

  1. Create custom action on review submission:
    • Count total reviews for user
    • Calculate average of Overall Rating
    • Update user's Average Rating property
    • Update Total Reviews count
  2. Create similar calculations for:
    • Communication Rating average
    • Quality Rating average
    • Professionalism Rating average

Step 36: Build Reviews Display

  1. On user profile screens, add List of Reviews:
    • Filter: Reviewed = Current User
    • Sort by: Created Date (Newest)
  2. Display for each review:
    • Reviewer name and photo
    • Star ratings
    • Review text
    • Project type
    • Date
    • Response (if any)
  3. Add "Respond to Review" option for reviewed user

Testing Your App

Step 37: Create Test Data

  1. Create test accounts:
    • 3-4 freelancer profiles with different skills
    • 2-3 client accounts
  2. Post sample jobs across categories
  3. Submit test proposals
  4. Create test contracts
  5. Use Stripe test card numbers for payment testing:
    • Success: 4242 4242 4242 4242
    • Declined: 4000 0000 0000 0002

Step 38: Test Core User Flows

Test each marketplace journey:

  1. Freelancer Flow:
  • Sign up → Complete profile → Browse jobs → Submit proposal → Get hired → Complete work → Receive payment → Get reviewed
  1. Client Flow:
  • Sign up → Post job → Review proposals → Hire freelancer → Fund payment → Approve work → Release payment → Leave review
  1. Messaging Flow:
  • Start conversation → Exchange messages → Share files → Receive notifications
  1. Search & Filter:
  • Search by keywords → Filter by category → Filter by budget → Sort results

Step 39: Preview and Debug

  1. Use Adalo's web previewer for desktop testing
  2. Download the Adalo Previewer app from the App Store or Google Play for iOS/Android testing
  3. Check all conditional logic and calculations
  4. Verify database relationships work correctly
  5. Test notification triggers
  6. Validate form inputs and error messages

Publishing Your Marketplace

Step 40: Prepare for Launch

With no-code platforms enabling significantly faster development, you can launch your MVP in weeks rather than months.

  1. Set up production Stripe account
  2. Configure push notification certificates
  3. Add essential legal pages:
    • Terms of Service
    • Privacy Policy
    • Commission fee disclosure
  4. Set up customer support (email, chat)
  5. Create onboarding tutorial
  6. Test all payment flows thoroughly

Step 41: Publish to Web

‍

  1. In Adalo, click "Publish"
  2. Choose "Web App"
  3. Select custom domain (requires Starter plan or higher)
  4. Configure domain DNS settings
  5. Publish and test live site

Learn about publishing web apps

Step 42: Publish to App Stores

  1. For iOS:
  • Purchase Apple Developer account ($99/year)
  • Prepare app icons and screenshots
  • Submit through Adalo's publishing flow
  • Wait for App Store review
  1. For Android:
  • Purchase Google Play Developer account ($25 one-time)
  • Prepare app assets
  • Submit through Adalo
  • Publish to Google Play

Guide to iOS publishing | Guide to Android publishing

Solving the Marketplace Chicken-and-Egg Problem

One critical challenge all marketplaces face: buyers won't join without sellers, and sellers won't join without buyers. Here's how to address this:

Step 43: Launch Strategy

  1. Start with supply side first:
  • Recruit 20-30 freelancers before opening to clients
  • Offer incentives (zero fees for first 3 months)
  • Focus on one niche category initially
  1. Bring your own demand:
  • Ask early freelancers to invite existing clients
  • Offer discounts for clients they bring
  • Create referral bonuses
  1. Provide standalone value:
  • Offer free portfolio hosting for freelancers
  • Provide project management tools
  • Create educational content

Research shows that focusing on micro-niches helps build critical mass faster than competing broadly.

Why Build Your Freelance Marketplace with Adalo

Adalo stands out as the optimal platform for building a freelance marketplace for several compelling reasons:

True Cross-Platform Development Unlike competitors like Softr (web-only), Sharetribe Go (template-based), or Sharetribe Flex (API-first with deep customization but no native mobile), Adalo lets you publish to iOS, Android, and web from a single build. This means your freelancers and clients can access your platform however they prefer.

Built-In Relational Database Adalo's native database handles complex marketplace relationships without requiring external tools like Airtable or Xano for your MVP. You can create sophisticated connections between users, jobs, proposals, and payments all within Adalo, then scale to Xano integration when you need advanced capabilities.

Rapid Development Without Compromise With 70% of new enterprise applications projected to use no-code/low-code by 2025, Adalo positions you at the forefront of this movement. Build your MVP in 8-15 weeks instead of 6-9 months with traditional development, at a fraction of the cost.

Enterprise-Grade Features for Growing Marketplaces As your platform scales, Adalo provides:

Cost-Effective Scaling Start free, upgrade to Professional ($65/month billed monthly; ~20% off with annual billing) when ready to launch, and scale to Business ($250/month) only when needed.

Proven Track Record Adalo has demonstrated its capability to support successful marketplace platforms at scale.

For entrepreneurs targeting the growing freelance marketplace opportunity, Adalo provides the fastest path from concept to revenue-generating platform.

Start Building With An App Template
Build your app fast with one of our pre-made app templates
Try it now
Read This Next

Looking For More?

Ready to Get Started on Adalo?